{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Search Tree -> Similar Words"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import jieba\n",
    "import re\n",
    "import math\n",
    "import wordcloud\n",
    "import random \n",
    "import matplotlib.pyplot as plt\n",
    "from gensim.models import Word2Vec\n",
    "from gensim.models.word2vec import LineSentence\n",
    "from smart_open import open\n",
    "from collections import defaultdict\n",
    "from functools import wraps\n",
    "from PIL import Image\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "csv_path = r'D:\\Github\\Data\\sqlResult_1558435.csv'\n",
    "content = pd.read_csv(csv_path, encoding='gb18030')\n",
    "content = content.fillna('')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>author</th>\n",
       "      <th>source</th>\n",
       "      <th>content</th>\n",
       "      <th>feature</th>\n",
       "      <th>title</th>\n",
       "      <th>url</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>89617</td>\n",
       "      <td></td>\n",
       "      <td>快科技@http://www.kkj.cn/</td>\n",
       "      <td>此外，自本周（6月12日）起，除小米手机6等15款机型外，其余机型已暂停更新发布（含开发版/...</td>\n",
       "      <td>{\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"37\"...</td>\n",
       "      <td>小米MIUI 9首批机型曝光：共计15款</td>\n",
       "      <td>http://www.cnbeta.com/articles/tech/623597.htm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>89616</td>\n",
       "      <td></td>\n",
       "      <td>快科技@http://www.kkj.cn/</td>\n",
       "      <td>骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器，高通强调，不会因为只考...</td>\n",
       "      <td>{\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"15\"...</td>\n",
       "      <td>骁龙835在Windows 10上的性能表现有望改善</td>\n",
       "      <td>http://www.cnbeta.com/articles/tech/623599.htm</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id author                  source  \\\n",
       "0  89617         快科技@http://www.kkj.cn/   \n",
       "1  89616         快科技@http://www.kkj.cn/   \n",
       "\n",
       "                                             content  \\\n",
       "0  此外，自本周（6月12日）起，除小米手机6等15款机型外，其余机型已暂停更新发布（含开发版/...   \n",
       "1  骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器，高通强调，不会因为只考...   \n",
       "\n",
       "                                             feature  \\\n",
       "0  {\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"37\"...   \n",
       "1  {\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"15\"...   \n",
       "\n",
       "                        title                                             url  \n",
       "0        小米MIUI 9首批机型曝光：共计15款  http://www.cnbeta.com/articles/tech/623597.htm  \n",
       "1  骁龙835在Windows 10上的性能表现有望改善  http://www.cnbeta.com/articles/tech/623599.htm  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "content[:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "news_content = content['content'].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cut(string):\n",
    "    return ' '.join(jieba.cut(string))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "Loading model from cache C:\\Users\\qq706\\AppData\\Local\\Temp\\jieba.cache\n",
      "Loading model cost 0.805 seconds.\n",
      "Prefix dict has been built succesfully.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'这是 一个 测试'"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cut('这是一个测试')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "# https://docs.python.org/2/library/re.html\n",
    "# []: Used to indicate a set of characters\n",
    "# \\d: this is equivalent to the set [0-9]\n",
    "# \\w: this is equivalent to the set [a-zA-Z0-9_]\n",
    "# +: match 1 or more repetitions of the preceding RE\n",
    "# obtain the nums or words in news_content\n",
    "def token(string):\n",
    "    return re.findall(r'[\\d|\\w]+', string)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['这是一个测试', '0000_abdc']"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "token('这是一个测试\\n\\n\\n0000_abdc')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "news_content = [token(n) for n in news_content] #clean data\n",
    "news_content = [' '.join(n) for n in news_content] #join data\n",
    "news_content = [cut(n) for n in news_content] #cut data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'此外   自 本周   6 月 12 日   起   除 小米 手机 6 等 15 款 机型 外   其余 机型 已 暂停 更新 发布   含 开发 版   体验版 内测   稳定版 暂不受 影响   以 确保 工程师 可以 集中 全部 精力 进行 系统优化 工作   有人 猜测 这 也 是 将 精力 主要 用到 MIUI   9 的 研发 之中   MIUI   8 去年 5 月 发布   距今已有 一年 有余   也 是 时候 更新换代 了   当然   关于 MIUI   9 的 确切 信息   我们 还是 等待 官方消息'"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "news_content[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [],
   "source": [
    "file_path = r\"D:\\Github\\Data\\news-sentences-cut.txt\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(file_path, 'w', encoding='utf-8') as f:\n",
    "    for n in news_content:\n",
    "        f.write(n + '\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconda3\\lib\\site-packages\\smart_open\\smart_open_lib.py:398: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function\n",
      "  'See the migration notes for details: %s' % _MIGRATION_NOTES_URL\n"
     ]
    }
   ],
   "source": [
    "news_word2vec= Word2Vec(LineSentence(file_path), size=35, workers=8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconda3\\lib\\site-packages\\smart_open\\smart_open_lib.py:398: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function\n",
      "  'See the migration notes for details: %s' % _MIGRATION_NOTES_URL\n"
     ]
    }
   ],
   "source": [
    "news_word2vec.save(r\"D:\\Github\\Data\\news-sentences-cut.model\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconda3\\lib\\site-packages\\smart_open\\smart_open_lib.py:398: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function\n",
      "  'See the migration notes for details: %s' % _MIGRATION_NOTES_URL\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[('意大利', 0.8819765448570251),\n",
       " ('克罗地亚', 0.8555775880813599),\n",
       " ('捷克', 0.8507201671600342),\n",
       " ('西班牙', 0.8348166942596436),\n",
       " ('奥地利', 0.8228058815002441),\n",
       " ('比什凯克', 0.8227503895759583),\n",
       " ('罗马尼亚', 0.8225716352462769),\n",
       " ('摩洛哥', 0.813398003578186),\n",
       " ('乌拉圭', 0.8124071359634399),\n",
       " ('科特迪瓦', 0.8097234964370728),\n",
       " ('比利时', 0.7948222756385803),\n",
       " ('巴林', 0.7902283668518066),\n",
       " ('里斯本', 0.790023684501648),\n",
       " ('马德里', 0.7876933813095093),\n",
       " ('瑞士', 0.7873736619949341),\n",
       " ('拉脱维亚', 0.787063479423523),\n",
       " ('巴塞罗那', 0.7769136428833008),\n",
       " ('伊斯坦布尔', 0.7759764194488525),\n",
       " ('拉帕尔马', 0.7729355096817017),\n",
       " ('圣胡安', 0.7699117660522461)]"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "news_word2vec = Word2Vec.load(r\"D:\\Github\\Data\\news-sentences-cut.model\")\n",
    "news_word2vec.wv.most_similar('葡萄牙', topn=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## More Date, Better Results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 分词的问题\n",
    "2. **数据量**，数据越多，效果越好，维基百科加进来，那么同义词就要好很多。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: Call to deprecated `most_similar` (Method will be removed in 4.0.0, use self.wv.most_similar() instead).\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[('表示', 0.8845512270927429),\n",
       " ('认为', 0.8431851863861084),\n",
       " ('指出', 0.8355127573013306),\n",
       " ('看来', 0.7920743823051453),\n",
       " ('明说', 0.7737349271774292),\n",
       " ('坦言', 0.77046799659729),\n",
       " ('介绍', 0.7628530263900757),\n",
       " ('称', 0.7419861555099487),\n",
       " ('告诉', 0.741806149482727),\n",
       " ('文说', 0.7248716950416565)]"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "news_word2vec.most_similar('说', topn=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "#进行存储\n",
    "def memo(func):\n",
    "    cache = {} \n",
    "    @wraps(func)\n",
    "    def _wrap(n, *arg):\n",
    "        for i in n:\n",
    "            if i in cache: result = cache[i] \n",
    "            else:\n",
    "                result = func(i, *arg) \n",
    "                cache[i] = result \n",
    "            return result\n",
    "    return _wrap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#@memo\n",
    "def get_related_words(initial_words, model):\n",
    "    \"\"\"\n",
    "    @initial_words are initial words we already know\n",
    "    @model is the word2vec model\n",
    "    \"\"\"\n",
    "    unseen = initial_words\n",
    "    \n",
    "    seen = defaultdict(int)\n",
    "    \n",
    "    max_size = 500  # could be greater\n",
    "    \n",
    "    while unseen and len(seen) < max_size:\n",
    "        #if len(seen) % 50 == 0: \n",
    "            #print('seen length : {}'.format(len(seen)))\n",
    "            \n",
    "        node = unseen.pop(0)\n",
    "        \n",
    "        new_expanding = [w for w, s in model.wv.most_similar(node, topn=20)]\n",
    "        \n",
    "        unseen += new_expanding\n",
    "        \n",
    "        seen[node] += 1\n",
    "        \n",
    "        # optimal: 1. score function could be revised\n",
    "        # optimal: 2. using dymanic programming to reduce computing time\n",
    "    \n",
    "    return seen"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "97927"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(news_word2vec.wv.vocab)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "related_words = get_related_words(['说', '表示'], news_word2vec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('说', 90),\n",
       " ('指出', 87),\n",
       " ('坦言', 83),\n",
       " ('表示', 82),\n",
       " ('认为', 78),\n",
       " ('透露', 75),\n",
       " ('所说', 71),\n",
       " ('看来', 70),\n",
       " ('特别强调', 64),\n",
       " ('告诉', 61),\n",
       " ('明说', 57),\n",
       " ('介绍', 49),\n",
       " ('称', 44),\n",
       " ('提到', 44),\n",
       " ('强调', 39),\n",
       " ('中说', 37),\n",
       " ('文说', 34),\n",
       " ('普遍认为', 32),\n",
       " ('建议', 29),\n",
       " ('相信', 29),\n",
       " ('对此', 28),\n",
       " ('提及', 24),\n",
       " ('写道', 24),\n",
       " ('问', 23),\n",
       " ('直言', 23),\n",
       " ('现阶段', 21),\n",
       " ('确信', 20),\n",
       " ('称赞', 19),\n",
       " ('看好', 19),\n",
       " ('觉得', 19),\n",
       " ('而言', 17),\n",
       " ('中称', 17),\n",
       " ('知情', 17),\n",
       " ('地说', 16),\n",
       " ('接受', 16),\n",
       " ('证实', 15),\n",
       " ('时说', 14),\n",
       " ('声称', 14),\n",
       " ('原话', 14),\n",
       " ('回答', 14),\n",
       " ('事实上', 13),\n",
       " ('表明', 13),\n",
       " ('承认', 13),\n",
       " ('说道', 12),\n",
       " ('列举', 12),\n",
       " ('反复强调', 12),\n",
       " ('充分说明', 12),\n",
       " ('坦承', 11),\n",
       " ('看到', 11),\n",
       " ('引用', 11),\n",
       " ('描述', 11),\n",
       " ('问道', 11),\n",
       " ('解释', 11),\n",
       " ('坚信', 11),\n",
       " ('具名', 10),\n",
       " ('怼', 10),\n",
       " ('批评', 10),\n",
       " ('肯定', 9),\n",
       " ('黄超', 9),\n",
       " ('武说', 9),\n",
       " ('还称', 9),\n",
       " ('援引', 9),\n",
       " ('猜测', 9),\n",
       " ('反驳', 9),\n",
       " ('赞赏', 9),\n",
       " ('谈论', 9),\n",
       " ('当然', 9),\n",
       " ('伟说', 8),\n",
       " ('来说', 8),\n",
       " ('童岚', 8),\n",
       " ('谢琳', 8),\n",
       " ('许臻', 8),\n",
       " ('祁', 8),\n",
       " ('深有感触', 8),\n",
       " ('农办', 8),\n",
       " ('深有体会', 8),\n",
       " ('董', 8),\n",
       " ('纳说', 8),\n",
       " ('非常重视', 8),\n",
       " ('请问', 8),\n",
       " ('质疑', 8),\n",
       " ('眼中', 7),\n",
       " ('留意到', 7),\n",
       " ('见到', 7),\n",
       " ('康逸', 7),\n",
       " ('冯俊伟摄', 7),\n",
       " ('自称', 7),\n",
       " ('获悉', 7),\n",
       " ('了解', 7),\n",
       " ('供图', 7),\n",
       " ('援外', 7),\n",
       " ('吴越', 7),\n",
       " ('肖凤祥', 7),\n",
       " ('卫生厅', 7),\n",
       " ('负责人', 7),\n",
       " ('正如', 7),\n",
       " ('的话', 7),\n",
       " ('此行', 7),\n",
       " ('爱台', 7),\n",
       " ('时称', 7),\n",
       " ('检视', 7),\n",
       " ('十分重视', 7),\n",
       " ('远远不够', 7),\n",
       " ('最缺', 7),\n",
       " ('归功于', 7),\n",
       " ('王耀', 7),\n",
       " ('陈说', 7),\n",
       " ('看准', 7),\n",
       " ('推脱', 7),\n",
       " ('要说', 7),\n",
       " ('给出', 7),\n",
       " ('答', 6),\n",
       " ('早就', 6),\n",
       " ('西万', 6),\n",
       " ('黄进', 6),\n",
       " ('浠水县', 6),\n",
       " ('保国', 6),\n",
       " ('农艺师', 6),\n",
       " ('海涛', 6),\n",
       " ('红霞', 6),\n",
       " ('张晓明', 6),\n",
       " ('民法学', 6),\n",
       " ('对瓦姆', 6),\n",
       " ('感叹', 6),\n",
       " ('佩服', 6),\n",
       " ('澄清', 6),\n",
       " ('暗示', 6),\n",
       " ('说法', 5),\n",
       " ('墨方', 5),\n",
       " ('据称', 5),\n",
       " ('曾称', 5),\n",
       " ('美国中央情报局', 5),\n",
       " ('上称', 5),\n",
       " ('重申', 5),\n",
       " ('高度重视', 5),\n",
       " ('提出', 5),\n",
       " ('着重强调', 5),\n",
       " ('一贯', 5),\n",
       " ('全力支持', 5),\n",
       " ('呼吁', 5),\n",
       " ('宣示', 5),\n",
       " ('本着', 5),\n",
       " ('敦促', 5),\n",
       " ('陆慷说', 5),\n",
       " ('口中', 5),\n",
       " ('慎重', 5),\n",
       " ('回应', 5),\n",
       " ('对于', 5),\n",
       " ('有何', 5),\n",
       " ('预言', 5),\n",
       " ('担忧', 5),\n",
       " ('期望', 5),\n",
       " ('或许', 5),\n",
       " ('展望未来', 5),\n",
       " ('显然', 5),\n",
       " ('其实', 5),\n",
       " ('因此', 5),\n",
       " ('努钦称', 4),\n",
       " ('里亚布', 4),\n",
       " ('核导弹', 4),\n",
       " ('申明', 4),\n",
       " ('评述', 4),\n",
       " ('简短', 4),\n",
       " ('为什么', 4),\n",
       " ('感慨', 4),\n",
       " ('心里', 4),\n",
       " ('那位', 4),\n",
       " ('要求', 4),\n",
       " ('意见建议', 4),\n",
       " ('必要', 4),\n",
       " ('还应', 4),\n",
       " ('相应', 4),\n",
       " ('吴恒', 4),\n",
       " ('提醒', 4),\n",
       " ('指南', 4),\n",
       " ('党政部门', 4),\n",
       " ('做法', 4),\n",
       " ('评价', 4),\n",
       " ('加以', 4),\n",
       " ('专家建议', 4),\n",
       " ('赞同', 4),\n",
       " ('黄向', 4),\n",
       " ('动向', 4),\n",
       " ('刁', 4),\n",
       " ('鉴于', 4),\n",
       " ('对', 4),\n",
       " ('知道', 4),\n",
       " ('阐述', 4),\n",
       " ('清楚', 4),\n",
       " ('近来', 4),\n",
       " ('热议', 4),\n",
       " ('关注', 4),\n",
       " ('预料', 4),\n",
       " ('令', 4),\n",
       " ('招致', 4),\n",
       " ('说明', 4),\n",
       " ('指望', 4),\n",
       " ('但是', 4),\n",
       " ('依赖于', 4),\n",
       " ('毕竟', 4),\n",
       " ('意料', 4),\n",
       " ('没错', 4),\n",
       " ('本来', 4),\n",
       " ('谈谈', 3),\n",
       " ('反问', 3),\n",
       " ('提问', 3),\n",
       " ('注意', 3),\n",
       " ('共见', 3),\n",
       " ('追问', 3),\n",
       " ('吗', 3),\n",
       " ('谈', 3),\n",
       " ('南方日报', 3),\n",
       " ('听', 3),\n",
       " ('感激', 3),\n",
       " ('眼里', 3),\n",
       " ('开玩笑', 3),\n",
       " ('由衷', 3),\n",
       " ('如是说', 3),\n",
       " ('考量', 3),\n",
       " ('希望', 3),\n",
       " ('期待', 3),\n",
       " ('将来', 3),\n",
       " ('让', 3),\n",
       " ('谈到', 3),\n",
       " ('想法', 3),\n",
       " ('理解', 3),\n",
       " ('之门', 3),\n",
       " ('来讲', 3),\n",
       " ('本身', 3),\n",
       " ('只是', 3),\n",
       " ('是因为', 3),\n",
       " ('实际上', 3),\n",
       " ('衡量', 3),\n",
       " ('不过', 3),\n",
       " ('之所以', 3),\n",
       " ('低估', 3),\n",
       " ('问过', 3),\n",
       " ('托说', 2),\n",
       " ('三军', 2),\n",
       " ('德说', 2),\n",
       " ('王晔', 2),\n",
       " ('科说', 2),\n",
       " ('政务司', 2),\n",
       " ('驻京办', 2),\n",
       " ('常务副', 2),\n",
       " ('军事科学院', 2),\n",
       " ('副', 2),\n",
       " ('锦', 2),\n",
       " ('韩长', 2),\n",
       " ('发展部', 2),\n",
       " ('斯克', 2),\n",
       " ('谈起', 2),\n",
       " ('溢于言表', 2),\n",
       " ('说起', 2),\n",
       " ('倍感', 2),\n",
       " ('感触', 2),\n",
       " ('总是', 2),\n",
       " ('太好了', 2),\n",
       " ('思乡', 2),\n",
       " ('获知', 2),\n",
       " ('胜任', 2),\n",
       " ('智囊团', 2),\n",
       " ('不得而知', 2),\n",
       " ('秘而不宣', 2),\n",
       " ('得知', 2),\n",
       " ('到任', 2),\n",
       " ('产假', 2),\n",
       " ('表态', 2),\n",
       " ('否认', 2),\n",
       " ('属实', 2),\n",
       " ('发声', 2),\n",
       " ('敲定', 2),\n",
       " ('坚称', 2),\n",
       " ('公开场合', 2),\n",
       " ('所提', 2),\n",
       " ('否决', 2),\n",
       " ('指责', 2),\n",
       " ('伊原', 2),\n",
       " ('来看', 2),\n",
       " ('尽管', 2),\n",
       " ('并非', 2),\n",
       " ('的确', 2),\n",
       " ('潜在', 2),\n",
       " ('看重', 2),\n",
       " ('充满信心', 2),\n",
       " ('前景', 2),\n",
       " ('乐观', 2),\n",
       " ('寄予厚望', 2),\n",
       " ('强劲', 2),\n",
       " ('非常明显', 2),\n",
       " ('有利', 2),\n",
       " ('看中', 2),\n",
       " ('水涨船高', 2),\n",
       " ('倒爷', 2),\n",
       " ('一方面', 2),\n",
       " ('这方面', 2),\n",
       " ('短浅', 2),\n",
       " ('因为', 2),\n",
       " ('想必', 2),\n",
       " ('有失', 2),\n",
       " ('打得', 2),\n",
       " ('自认', 2),\n",
       " ('深感', 2),\n",
       " ('忧心忡忡', 2),\n",
       " ('不解', 2),\n",
       " ('确实', 2),\n",
       " ('这样', 2),\n",
       " ('可是', 2),\n",
       " ('从没', 2),\n",
       " ('挺', 2),\n",
       " ('感觉', 2),\n",
       " ('明白', 2),\n",
       " ('想不到', 2),\n",
       " ('有时候', 2),\n",
       " ('未必', 2),\n",
       " ('看得', 2),\n",
       " ('怎么样', 2),\n",
       " ('也许', 2),\n",
       " ('嘛', 2),\n",
       " ('一点儿', 2),\n",
       " ('形容', 2),\n",
       " ('聊到', 2),\n",
       " ('说实话', 2),\n",
       " ('喜出望外', 2),\n",
       " ('薇', 2),\n",
       " ('庆幸', 2),\n",
       " ('苏轶人', 2),\n",
       " ('汤洁峰', 2),\n",
       " ('不久前', 1),\n",
       " ('库泰萨', 1),\n",
       " ('森访', 1),\n",
       " ('不明智', 1),\n",
       " ('联访', 1),\n",
       " ('广播公司', 1),\n",
       " ('字幕组', 1),\n",
       " ('艾奥瓦', 1),\n",
       " ('消息报', 1),\n",
       " ('郑继永说', 1),\n",
       " ('雅二大', 1),\n",
       " ('兼', 1),\n",
       " ('坚说', 1),\n",
       " ('兼任', 1),\n",
       " ('上海大学', 1),\n",
       " ('北京第二外国语学院', 1),\n",
       " ('管理学', 1),\n",
       " ('毫不讳言', 1),\n",
       " ('海淀园', 1),\n",
       " ('担任', 1),\n",
       " ('海为', 1),\n",
       " ('攻读', 1),\n",
       " ('秦晓雯', 1),\n",
       " ('成绩优秀', 1),\n",
       " ('阿米尔', 1),\n",
       " ('非常高兴', 1),\n",
       " ('历史课', 1),\n",
       " ('感谢', 1),\n",
       " ('自豪', 1),\n",
       " ('骄傲', 1),\n",
       " ('赞美', 1),\n",
       " ('惊叹', 1),\n",
       " ('民间文学', 1),\n",
       " ('直言不讳', 1),\n",
       " ('谦虚', 1),\n",
       " ('盛赞', 1),\n",
       " ('解读', 1),\n",
       " ('明智', 1),\n",
       " ('民法', 1),\n",
       " ('总则', 1),\n",
       " ('决策', 1),\n",
       " ('之问', 1),\n",
       " ('几点', 1),\n",
       " ('部门规章', 1),\n",
       " ('决断', 1),\n",
       " ('看法', 1),\n",
       " ('权威', 1),\n",
       " ('然而', 1),\n",
       " ('如此', 1),\n",
       " ('但', 1),\n",
       " ('为何', 1),\n",
       " ('众所周知', 1),\n",
       " ('印证', 1),\n",
       " ('指向', 1),\n",
       " ('估计', 1),\n",
       " ('推测', 1),\n",
       " ('介入', 1),\n",
       " ('促使', 1),\n",
       " ('结论', 1),\n",
       " ('判断', 1),\n",
       " ('对付', 1),\n",
       " ('意图', 1),\n",
       " ('基于', 1),\n",
       " ('另一方面', 1),\n",
       " ('意愿', 1),\n",
       " ('航空业', 1),\n",
       " ('策略', 1),\n",
       " ('现状', 1),\n",
       " ('当前', 1),\n",
       " ('谨慎', 1),\n",
       " ('审慎', 1),\n",
       " ('短期内', 1),\n",
       " ('不确定性', 1),\n",
       " ('贸易逆差', 1),\n",
       " ('长期', 1),\n",
       " ('还是', 1),\n",
       " ('就是', 1),\n",
       " ('感兴趣', 1),\n",
       " ('选择', 1),\n",
       " ('所以', 1),\n",
       " ('赢家', 1),\n",
       " ('一定', 1),\n",
       " ('也', 1),\n",
       " ('都', 1),\n",
       " ('一点', 1),\n",
       " ('如果', 1),\n",
       " ('首先', 1),\n",
       " ('同样', 1),\n",
       " ('常说', 1),\n",
       " ('高佑思', 1),\n",
       " ('留给', 1),\n",
       " ('爱上', 1),\n",
       " ('情结', 1),\n",
       " ('出身', 1),\n",
       " ('羡慕', 1),\n",
       " ('深知', 1),\n",
       " ('钟爱', 1),\n",
       " ('老一辈', 1),\n",
       " ('熟知', 1),\n",
       " ('聊起', 1),\n",
       " ('模样', 1),\n",
       " ('心中', 1),\n",
       " ('真的', 1),\n",
       " ('想过', 1),\n",
       " ('从来', 1),\n",
       " ('当时', 1),\n",
       " ('既然', 1),\n",
       " ('没想到', 1),\n",
       " ('哭', 1),\n",
       " ('于是', 1),\n",
       " ('奇怪', 1),\n",
       " ('只不过', 1),\n",
       " ('以为', 1),\n",
       " ('很少', 1),\n",
       " ('害怕', 1),\n",
       " ('说出', 1),\n",
       " ('忍不住', 1),\n",
       " ('想起', 1),\n",
       " ('对不起', 1),\n",
       " ('记得', 1),\n",
       " ('妈', 1),\n",
       " ('一脸', 1),\n",
       " ('太棒了', 1),\n",
       " ('谈过', 1),\n",
       " ('嘲笑', 1),\n",
       " ('出走', 1),\n",
       " ('惦记着', 1),\n",
       " ('魔术师', 1),\n",
       " ('不可思议', 1),\n",
       " ('太太', 1),\n",
       " ('害羞', 1),\n",
       " ('老友', 1),\n",
       " ('在我看来', 1),\n",
       " ('极力推荐', 1),\n",
       " ('何许人也', 1),\n",
       " ('预料到', 1),\n",
       " ('不在乎', 1),\n",
       " ('一再强调', 1),\n",
       " ('问起', 1),\n",
       " ('服众', 1),\n",
       " ('非常感谢', 1),\n",
       " ('甘春', 1),\n",
       " ('邓敏', 1),\n",
       " ('黄和逊', 1),\n",
       " ('商报讯', 1),\n",
       " ('严锋', 1),\n",
       " ('韩茜', 1),\n",
       " ('谢晗', 1),\n",
       " ('李秀明', 1),\n",
       " ('李晓渝', 1),\n",
       " ('张代蕾', 1),\n",
       " ('周效政', 1),\n",
       " ('刘帅', 1),\n",
       " ('韩冲', 1),\n",
       " ('科技日报', 1),\n",
       " ('韩梁', 1),\n",
       " ('赵珺', 1),\n",
       " ('李华', 1),\n",
       " ('张侨', 1),\n",
       " ('吴飞座', 1),\n",
       " ('尧', 1),\n",
       " ('王振宏', 1),\n",
       " ('王希', 1),\n",
       " ('姜辰蓉', 1),\n",
       " ('毛鑫', 1),\n",
       " ('庞元元', 1),\n",
       " ('姜潇', 1),\n",
       " ('董小红', 1),\n",
       " ('陆文军', 1),\n",
       " ('薛钦峰', 1),\n",
       " ('洪天牧', 1),\n",
       " ('穆序', 1)]"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sorted(related_words.items(), key=lambda x: x[1], reverse=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## TFIDF Key words\n",
    "$$ TF-IDF = TF * IDF $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "#包含特定单词的文档数量\n",
    "def document_frequency(word): \n",
    "    return sum(1 for n in news_content if word in n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "70342"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "document_frequency('的')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "#反向文档频率\n",
    "#文档总数与包含特定单词的文档数量的对数比率\n",
    "def idf(word):\n",
    "    \"\"\"Gets the inversed document frequency\"\"\"\n",
    "    return math.log10(len(news_content) / document_frequency(word))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1051466115514474"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idf('的')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.948039950009831"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idf('小米')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "#术语频率\n",
    "#特定单词的计数与文档中单词总数的比率\n",
    "def tf(word, document):\n",
    "    \"\"\"\n",
    "    Gets the term frequemcy of a @word in a @document.\n",
    "    \"\"\"\n",
    "    words = document.split()\n",
    "    \n",
    "    return sum(1 for w in words if w == word)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'?\\r\\n\\u3000\\u3000巨丰早评：市场将再次探底\\r\\n\\u3000\\u3000【巨丰观点】\\r\\n\\u3000\\u3000周四大盘冲高回落，2500余只个股下跌。上证50、沪深300指数顽强收红。早盘大盘低开高走，展开反弹，沪指冲破120日均线压力位；午后大盘跳水，个股普跌。盘面上，保险、电力、银行、民航机场、券商、房地产、人工智能、迪士尼、网络安全等板块涨幅居前。雄安新区、福州新区、医疗器械、丝绸之路等跌幅居前。\\r\\n\\u3000\\u3000金融股全线大涨：保险板块涨3%：新华保险、中国太保、中国人寿涨4%，中国平安涨2%；西水股份、天茂集团盘中大涨7%以上。银行板块涨2%：招商银行大涨8%，贵阳银行、兴业银行、浦发银行、兴业银行等涨幅居前。金融股是A股纳入MSCI指数的受益者，后市可以逢低关注。\\r\\n\\u3000\\u3000盘中万达电影、复星医药等白马股闪崩，导致午后市场出现大幅跳水。盘后消息，银监会于6月中旬要求各家银行排查包括万达、海航集团、复星、浙江罗森内里在内数家企业的授信及风险分析，排查对象多是近年来海外投资比较凶猛、在银行业敞口较大的民营企业集团。\\r\\n\\u3000\\u3000巨丰投顾认为自5月以来，大盘已经走出了3重底的走势，并开启中级反弹行情。沪指在上证50及白马股推动下率先反弹，但遭遇60日、120日均线强压力而出现调整。MSCI纳入A股后，沪深300指数创17个月新高，但2500余股下跌，市场分化明显。随着6月末市场流动性紧张的可能出现，市场将再次出现探底。建议投资者重点关注半年报大幅预增的错杀股和具备估值优势的大蓝筹。\\r\\n\\u3000\\u3000天信投资：尾盘跳水原因揭秘 伏击的品种曝光\\r\\n\\u3000\\u3000周四市场点评：\\r\\n\\u3000\\u3000沪深两市早盘纷纷低开，但是开盘之后权重板块崛起，其中保险和银行表现尤其明显，低矮动股指快速拉升，并顺势突破了60日均线和半年线的束缚；在主板拉升的过程中，市场的分化格局也较明显，题材板块和创业板表现相对较弱。不过虽然市场在早盘的上攻，但是成交量萎缩明教明显，所以这种上涨比较虚。果不其然，午后个股再度纷纷杀跌，同时股指也是顺势回落，沪市的半年线得而复失，形成长长的上影线；而创业板股指在回落的过程中失守5日均线的支撑。整体上周四市场全天保持宽幅震荡走势，尤其是沪市冲高回落。保险、银行、中字头、举牌等品种涨幅居前；钛金属、区块链、雄安新区、民营医院等品种领跌。\\r\\n\\u3000\\u3000今日市场预测：\\r\\n\\u3000\\u3000在周三收市的评论中，我们指出周四市场会出现阶段性的普涨行情，而周四早盘三大股指齐齐上涨，即使创业板股指涨幅较小，但是市场确实也给我们呈现的普涨格局。但是午后的跳水，包括创业板股指先下跌，随后沪指尾盘的快速下杀，使得市场从普涨瞬间到普跌，市场的大起大落来的非常刺激。从三大股指周四呈现给大家的K线组合来看，预计今日市场齐跌的概率较大，不过创业板合格题材板块或具备一定的抗跌性。\\r\\n\\u3000\\u3000短期行情判断：\\r\\n\\u3000\\u3000从大的环境上来看，市场目前本身不具备大面积和大空间的反弹基础，因为目前无论是从宏观面、货币基本面或者从国际经济和政治的角度来看，都不具备这样的条件，所以反应到市场中来，只能是结构性、局部性的投机性机会。而最近半个月以来，市场的走势也确实符合局部性、结构性投机的走势。\\r\\n\\u3000\\u3000周四市场沪指形成带长长上影线的倒锤阴线；创业板股指形成的是跌破5日和10日均线的中阴线，这种类型的K线形态，几乎都是市场开始调整的先兆，所以短期市场而言，悲观的情绪或升温。\\r\\n\\u3000\\u3000后市投资建议：\\r\\n\\u3000\\u3000短期建议投资者一定要控制好自身的仓位。中期继续看好题材板块的崛起，特别是次新股、高送转、重组股等等可以不断的去伏击，依旧具备超跌反弹的性质。\\r\\n'"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "content['content'][11]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf('银行', news_content[11])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf('创业板', news_content[11])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf('短期', news_content[11])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.506757120518876"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idf('创业板')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.4550169427748936"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idf('银行')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.9923664854640575"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idf('短期')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_keywords_of_a_ducment(document):\n",
    "    words = set(document.split())\n",
    "    \n",
    "    tfidf = [\n",
    "        (w, tf(w, document) * idf(w)) for w in words\n",
    "    ]\n",
    "    \n",
    "    tfidf = sorted(tfidf, key=lambda x: x[1], reverse=True)\n",
    "    \n",
    "    return tfidf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/json": {
       "cell": {
        "!": "OSMagics",
        "HTML": "Other",
        "SVG": "Other",
        "bash": "Other",
        "capture": "ExecutionMagics",
        "cmd": "Other",
        "debug": "ExecutionMagics",
        "file": "Other",
        "html": "DisplayMagics",
        "javascript": "DisplayMagics",
        "js": "DisplayMagics",
        "latex": "DisplayMagics",
        "markdown": "DisplayMagics",
        "perl": "Other",
        "prun": "ExecutionMagics",
        "pypy": "Other",
        "python": "Other",
        "python2": "Other",
        "python3": "Other",
        "ruby": "Other",
        "script": "ScriptMagics",
        "sh": "Other",
        "svg": "DisplayMagics",
        "sx": "OSMagics",
        "system": "OSMagics",
        "time": "ExecutionMagics",
        "timeit": "ExecutionMagics",
        "writefile": "OSMagics"
       },
       "line": {
        "alias": "OSMagics",
        "alias_magic": "BasicMagics",
        "autoawait": "AsyncMagics",
        "autocall": "AutoMagics",
        "automagic": "AutoMagics",
        "autosave": "KernelMagics",
        "bookmark": "OSMagics",
        "cd": "OSMagics",
        "clear": "KernelMagics",
        "cls": "KernelMagics",
        "colors": "BasicMagics",
        "conda": "PackagingMagics",
        "config": "ConfigMagics",
        "connect_info": "KernelMagics",
        "copy": "Other",
        "ddir": "Other",
        "debug": "ExecutionMagics",
        "dhist": "OSMagics",
        "dirs": "OSMagics",
        "doctest_mode": "BasicMagics",
        "echo": "Other",
        "ed": "Other",
        "edit": "KernelMagics",
        "env": "OSMagics",
        "gui": "BasicMagics",
        "hist": "Other",
        "history": "HistoryMagics",
        "killbgscripts": "ScriptMagics",
        "ldir": "Other",
        "less": "KernelMagics",
        "load": "CodeMagics",
        "load_ext": "ExtensionMagics",
        "loadpy": "CodeMagics",
        "logoff": "LoggingMagics",
        "logon": "LoggingMagics",
        "logstart": "LoggingMagics",
        "logstate": "LoggingMagics",
        "logstop": "LoggingMagics",
        "ls": "Other",
        "lsmagic": "BasicMagics",
        "macro": "ExecutionMagics",
        "magic": "BasicMagics",
        "matplotlib": "PylabMagics",
        "mkdir": "Other",
        "more": "KernelMagics",
        "notebook": "BasicMagics",
        "page": "BasicMagics",
        "pastebin": "CodeMagics",
        "pdb": "ExecutionMagics",
        "pdef": "NamespaceMagics",
        "pdoc": "NamespaceMagics",
        "pfile": "NamespaceMagics",
        "pinfo": "NamespaceMagics",
        "pinfo2": "NamespaceMagics",
        "pip": "PackagingMagics",
        "popd": "OSMagics",
        "pprint": "BasicMagics",
        "precision": "BasicMagics",
        "prun": "ExecutionMagics",
        "psearch": "NamespaceMagics",
        "psource": "NamespaceMagics",
        "pushd": "OSMagics",
        "pwd": "OSMagics",
        "pycat": "OSMagics",
        "pylab": "PylabMagics",
        "qtconsole": "KernelMagics",
        "quickref": "BasicMagics",
        "recall": "HistoryMagics",
        "rehashx": "OSMagics",
        "reload_ext": "ExtensionMagics",
        "ren": "Other",
        "rep": "Other",
        "rerun": "HistoryMagics",
        "reset": "NamespaceMagics",
        "reset_selective": "NamespaceMagics",
        "rmdir": "Other",
        "run": "ExecutionMagics",
        "save": "CodeMagics",
        "sc": "OSMagics",
        "set_env": "OSMagics",
        "store": "StoreMagics",
        "sx": "OSMagics",
        "system": "OSMagics",
        "tb": "ExecutionMagics",
        "time": "ExecutionMagics",
        "timeit": "ExecutionMagics",
        "unalias": "OSMagics",
        "unload_ext": "ExtensionMagics",
        "who": "NamespaceMagics",
        "who_ls": "NamespaceMagics",
        "whos": "NamespaceMagics",
        "xdel": "NamespaceMagics",
        "xmode": "BasicMagics"
       }
      },
      "text/plain": [
       "Available line magics:\n",
       "%alias  %alias_magic  %autoawait  %autocall  %automagic  %autosave  %bookmark  %cd  %clear  %cls  %colors  %conda  %config  %connect_info  %copy  %ddir  %debug  %dhist  %dirs  %doctest_mode  %echo  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %macro  %magic  %matplotlib  %mkdir  %more  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %pip  %popd  %pprint  %precision  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %ren  %rep  %rerun  %reset  %reset_selective  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode\n",
       "\n",
       "Available cell magics:\n",
       "%%!  %%HTML  %%SVG  %%bash  %%capture  %%cmd  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%markdown  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile\n",
       "\n",
       "Automagic is ON, % prefix IS NOT needed for line magics."
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%lsmagic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://ipython.readthedocs.io/en/stable/interactive/magics.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " "
     ]
    }
   ],
   "source": [
    "%prun get_keywords_of_a_ducment(news_content[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "machine_new_keywords = get_keywords_of_a_ducment(news_content[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('机械', 19.73268423154147),\n",
       " ('工业', 13.726799287798574),\n",
       " ('百强', 12.218936930008129),\n",
       " ('机械行业', 11.732905915902746),\n",
       " ('王瑞祥', 9.904722647584947),\n",
       " ('中机联', 9.904722647584947),\n",
       " ('增速', 8.057368905265053),\n",
       " ('态势', 7.971371787277902),\n",
       " ('恢复性', 6.867694767829172),\n",
       " ('规模', 6.861746056315247),\n",
       " ('回落', 6.643121992377128),\n",
       " ('增长', 6.604587773896507),\n",
       " ('企业', 6.260042817487905),\n",
       " ('陈斌', 5.9311791790524575),\n",
       " ('呈现', 5.279381611367784),\n",
       " ('原材料', 5.215938100214726),\n",
       " ('16992', 4.9523613237924735),\n",
       " ('但远', 4.9523613237924735),\n",
       " ('刘瑾', 4.651331328128492),\n",
       " ('三十', 4.6438668975349),\n",
       " ('入围', 4.629743188559925),\n",
       " ('钢铁', 4.588699854270723),\n",
       " ('回升', 4.553165964236777),\n",
       " ('联合会', 4.4415451172114695),\n",
       " ('行业', 4.256149034981132),\n",
       " ('后移', 4.253391319456455),\n",
       " ('前十强', 4.253391319456455),\n",
       " ('发展', 4.24347205022841),\n",
       " ('亿元', 4.194707226838383),\n",
       " ('机械类', 4.17421007340883),\n",
       " ('相当规模', 4.17421007340883),\n",
       " ('更新改造', 4.17421007340883),\n",
       " ('年降', 4.107263283778217),\n",
       " ('徐工', 3.9981188143531488),\n",
       " ('工程', 3.9916862993694178),\n",
       " ('出现', 3.7560113879094406),\n",
       " ('中联重科', 3.748241341136549),\n",
       " ('仍', 3.665948565614492),\n",
       " ('较大', 3.65832649752095),\n",
       " ('中国汽车工业协会', 3.6513313281284923),\n",
       " ('变强', 3.6099386429702673),\n",
       " ('总体', 3.591018845444925),\n",
       " ('保持高速', 3.5373879758216558),\n",
       " ('换位', 3.5052032924502545),\n",
       " ('比如', 3.4905315667465113),\n",
       " ('逐月', 3.4752400690728114),\n",
       " ('由大', 3.4752400690728114),\n",
       " ('表示', 3.4536423582977496),\n",
       " ('企业名单', 3.4472113454725677),\n",
       " ('均', 3.413941587967606),\n",
       " ('十强', 3.3960588230251862),\n",
       " ('三一', 3.3503013324645115),\n",
       " ('平均', 3.342655913089492),\n",
       " ('整体', 3.322429124121176),\n",
       " ('调整期', 3.318892868212887),\n",
       " ('压力', 3.305708050183972),\n",
       " ('经济指标', 3.21199863429823),\n",
       " ('汽车', 3.195737446406074),\n",
       " ('保有量', 3.188933330229536),\n",
       " ('经济网', 3.126286521091647),\n",
       " ('利润总额', 3.071547731511682),\n",
       " ('抢眼', 3.007878651642305),\n",
       " ('任重道远', 3.0029713171475607),\n",
       " ('多年', 2.9986978653420366),\n",
       " ('根本性', 2.9885734964469184),\n",
       " ('排位', 2.970090090752905),\n",
       " ('169', 2.948039950009831),\n",
       " ('中国', 2.917491209470893),\n",
       " ('徘徊', 2.9109686386342486),\n",
       " ('新旧', 2.8954564724560012),\n",
       " ('现役', 2.8916634834388617),\n",
       " ('经济运行', 2.884175462046312),\n",
       " ('需求', 2.8632317045459827),\n",
       " ('好于', 2.8519907786749106),\n",
       " ('固定资产', 2.806233288114236),\n",
       " ('至', 2.784114021467203),\n",
       " ('持续增长', 2.762029625622182),\n",
       " ('了', 2.7530014092101593),\n",
       " ('增加值', 2.7375174757447756),\n",
       " ('达到', 2.7333500906799535),\n",
       " ('出炉', 2.7068486559783236),\n",
       " ('增加', 2.665284116361493),\n",
       " ('产业结构', 2.653508247382767),\n",
       " ('副会长', 2.6448652858792605),\n",
       " ('由于', 2.624157388191586),\n",
       " ('增大', 2.617907572641543),\n",
       " ('低位', 2.5925258414525856),\n",
       " ('动荡', 2.5685459578120424),\n",
       " ('创新', 2.5681372266885054),\n",
       " ('增量', 2.5614262166890946),\n",
       " ('牢固', 2.556161976696737),\n",
       " ('2016', 2.5450574183796917),\n",
       " ('价格指数', 2.5258500624278986),\n",
       " ('产品', 2.5209690024662845),\n",
       " ('2005', 2.513028629962211),\n",
       " ('上年', 2.492968836033243),\n",
       " ('逐年', 2.4914634810359257),\n",
       " ('缓慢', 2.488468334806566),\n",
       " ('两项', 2.46948774018372),\n",
       " ('但', 2.4593444283982095),\n",
       " ('稳中', 2.4445054520966427),\n",
       " ('转换', 2.4312232400884373),\n",
       " ('数据', 2.4284304701608277),\n",
       " ('低迷', 2.4273165167556283),\n",
       " ('业态', 2.4021329707373793),\n",
       " ('近几年', 2.362411722466766),\n",
       " ('化工', 2.3546661378669613),\n",
       " ('下行', 2.3503013324645115),\n",
       " ('日讯', 2.3385195019164042),\n",
       " ('增幅', 2.3364112721360724),\n",
       " ('煤炭', 2.3301473008261784),\n",
       " ('升至', 2.318892868212887),\n",
       " ('震荡', 2.304001312811542),\n",
       " ('动能', 2.2849083709025195),\n",
       " ('明年', 2.2473533644591375),\n",
       " ('走势', 2.221579048126084),\n",
       " ('主要', 2.2196289745949174),\n",
       " ('会长', 2.1670314887817064),\n",
       " ('高达', 2.1627806116280484),\n",
       " ('担忧', 2.1585709391016548),\n",
       " ('市场', 2.1353584391728972),\n",
       " ('没有', 2.1292630530088865),\n",
       " ('两位', 2.112255229335716),\n",
       " ('的', 2.102932231028948),\n",
       " ('积累', 2.0992717939406083),\n",
       " ('产量', 2.0962368795501733),\n",
       " ('电力', 2.092622757595327),\n",
       " ('矛盾', 2.09202331722148),\n",
       " ('结构性', 2.0860739847082788),\n",
       " ('平稳', 2.0647440234567376),\n",
       " ('石油', 2.0647440234567376),\n",
       " ('也', 2.035789095863084),\n",
       " ('同时', 2.0271830020187123),\n",
       " ('难度', 2.022431763707886),\n",
       " ('92', 1.9942754752713885),\n",
       " ('此后', 1.9942754752713885),\n",
       " ('短期', 1.9923664854640575),\n",
       " ('使得', 1.968735036667939),\n",
       " ('名单', 1.9655895895262288),\n",
       " ('2012', 1.9655895895262288),\n",
       " ('低于', 1.949763343072565),\n",
       " ('强烈', 1.9074297776433136),\n",
       " ('深度', 1.9027557111975004),\n",
       " ('说明', 1.8996673818675058),\n",
       " ('排名', 1.8663576181740917),\n",
       " ('高速', 1.8628094409060196),\n",
       " ('装备', 1.833105434514537),\n",
       " ('难以', 1.8062332881142356),\n",
       " ('普遍', 1.8031422111370938),\n",
       " ('指数', 1.7780107263130935),\n",
       " ('上升', 1.7662529439792682),\n",
       " ('最近', 1.7496006363992738),\n",
       " ('主办', 1.744188797125352),\n",
       " ('同样', 1.7333009913436124),\n",
       " ('高', 1.7282840637671162),\n",
       " ('同比', 1.7265353323305803),\n",
       " ('各类', 1.7183505062052942),\n",
       " ('下降', 1.70783681222239),\n",
       " ('大幅', 1.7051247742857096),\n",
       " ('处于', 1.6934846944203423),\n",
       " ('因素', 1.6915746551374973),\n",
       " ('维护', 1.6670290961485892),\n",
       " ('相比', 1.6643357884041108),\n",
       " ('两年', 1.6603268877977373),\n",
       " ('只是', 1.6500303951080744),\n",
       " ('考虑', 1.6489492531957317),\n",
       " ('32', 1.636600833126739),\n",
       " ('等', 1.6323131825512693),\n",
       " ('近期', 1.6282847440529873),\n",
       " ('之前', 1.6169034231030894),\n",
       " ('确定', 1.615101784042198),\n",
       " ('成本', 1.6021133054583108),\n",
       " ('改变', 1.6013384712083498),\n",
       " ('设备', 1.6007582513733447),\n",
       " ('表现', 1.5861252000741806),\n",
       " ('发布会', 1.5825890351955108),\n",
       " ('升级', 1.5788976021601047),\n",
       " ('面临', 1.5593128573756954),\n",
       " ('执行', 1.5315807042439082),\n",
       " ('价格', 1.5182716853745828),\n",
       " ('变化', 1.51556281356067),\n",
       " ('原因', 1.4901131084374761),\n",
       " ('一定', 1.489215187066124),\n",
       " ('长期', 1.4777080704304109),\n",
       " ('还', 1.4730246953620385),\n",
       " ('强', 1.4717574528800272),\n",
       " ('模式', 1.471062050459618),\n",
       " ('日前', 1.4650815073494048),\n",
       " ('什么', 1.4632469544135542),\n",
       " ('保持', 1.4515761508750178),\n",
       " ('公布', 1.4443705989727822),\n",
       " ('不过', 1.4431588014613708),\n",
       " ('健康', 1.436355093406426),\n",
       " ('全部', 1.4222897549550955),\n",
       " ('基本', 1.4194796043850764),\n",
       " ('经过', 1.4090384231455615),\n",
       " ('之后', 1.4028676105774605),\n",
       " ('此外', 1.3910213823335724),\n",
       " ('指出', 1.389711651580557),\n",
       " ('分析', 1.388050413831871),\n",
       " ('还有', 1.375559427963561),\n",
       " ('形成', 1.3654366156476532),\n",
       " ('专家', 1.3543372514582839),\n",
       " ('我国', 1.3365164409177714),\n",
       " ('总', 1.327598250797306),\n",
       " ('去年', 1.2942544882860807),\n",
       " ('产业', 1.2508796881715465),\n",
       " ('投资', 1.2463266630781231),\n",
       " ('信息', 1.2461557819105031),\n",
       " ('略', 1.2382831588106176),\n",
       " ('继续', 1.2350237410686098),\n",
       " ('基础', 1.2270215078827365),\n",
       " ('根据', 1.2232775667488618),\n",
       " ('环境', 1.2142946090150044),\n",
       " ('显示', 1.1870653940944171),\n",
       " ('曾', 1.1781364189235546),\n",
       " ('又', 1.1611620772935982),\n",
       " ('远', 1.157664196900475),\n",
       " ('22', 1.1569679888611843),\n",
       " ('可能', 1.1455032942736563),\n",
       " ('以来', 1.1343995192604797),\n",
       " ('部分', 1.121644374355576),\n",
       " ('23', 1.1108141585359204),\n",
       " ('实现', 1.1061479599130863),\n",
       " ('服务', 1.0882657503682263),\n",
       " ('率', 1.0870204181678897),\n",
       " ('社会', 1.0746445229274968),\n",
       " ('已经', 1.0650253933933065),\n",
       " ('相关', 1.059599089176657),\n",
       " ('较', 1.0157973186572078),\n",
       " ('不', 1.0069391592825077),\n",
       " ('列', 0.9869714535773513),\n",
       " ('这是', 0.9835516098796154),\n",
       " ('成为', 0.9830852283035417),\n",
       " ('重要', 0.9685096048010019),\n",
       " ('15', 0.9544509564457302),\n",
       " ('该', 0.9133043057590299),\n",
       " ('未', 0.8997827987478156),\n",
       " ('比', 0.8420969845527588),\n",
       " ('是', 0.8138857280827148),\n",
       " ('10', 0.7960848277894573),\n",
       " ('6', 0.7622602583437212),\n",
       " ('由', 0.7609103093275782),\n",
       " ('向', 0.7486215151586154),\n",
       " ('好', 0.7288653828300791),\n",
       " ('点', 0.7228074598113371),\n",
       " ('他', 0.7074907017272314),\n",
       " ('上', 0.7073166822180775),\n",
       " ('及', 0.6828250310365068),\n",
       " ('已', 0.6788276436411759),\n",
       " ('其', 0.6604599233270064),\n",
       " ('之', 0.5990414795497642),\n",
       " ('8', 0.5787505954795428),\n",
       " ('4', 0.5700969769950187),\n",
       " ('5', 0.5511525867465363),\n",
       " ('到', 0.5374380896146497),\n",
       " ('个', 0.5035468301229501),\n",
       " ('这', 0.5000074536188772),\n",
       " ('对', 0.49485789721916834),\n",
       " ('前', 0.4735784562858743),\n",
       " ('有', 0.44307813505580745),\n",
       " ('为', 0.38692675348471445),\n",
       " ('和', 0.3810835072902879),\n",
       " ('年', 0.3785594723181429),\n",
       " ('1', 0.3482445783310308),\n",
       " ('记者', 0.30906660129308033),\n",
       " ('在', 0.2748809271090362),\n",
       " ('一', 0.23694300119741732),\n",
       " ('2017', 0.2022542388651758),\n",
       " ('月', 0.17435784429986328),\n",
       " ('中', 0.17187119251677352),\n",
       " ('7', 0.15297252207708978),\n",
       " ('0', 0.12495973836320823),\n",
       " ('2', 0.12008239257713019),\n",
       " ('新', 0.031997949117575065)]"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_keywords_of_a_ducment(news_content[101])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Wordcloud"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "wc = wordcloud.WordCloud(r'D:\\Github\\Data\\SourceHanSerifSC-Regular.otf')\n",
    "# we could download the font from https://github.com/Computing-Intelligence/datasource"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on method generate_from_frequencies in module wordcloud.wordcloud:\n",
      "\n",
      "generate_from_frequencies(frequencies, max_font_size=None) method of wordcloud.wordcloud.WordCloud instance\n",
      "    Create a word_cloud from words and frequencies.\n",
      "    \n",
      "    Parameters\n",
      "    ----------\n",
      "    frequencies : dict from string to float\n",
      "        A contains words and associated frequency.\n",
      "    \n",
      "    max_font_size : int\n",
      "        Use this font-size instead of self.max_font_size\n",
      "    \n",
      "    Returns\n",
      "    -------\n",
      "    self\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(wc.generate_from_frequencies)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "machine_new_keywords_dict = {w: score for w, score in machine_new_keywords}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x2091434a630>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(wc.generate_from_frequencies(machine_new_keywords_dict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "shenzhen_social_news = get_keywords_of_a_ducment(news_content[4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('刘青', 67.12860103609216),\n",
       " ('女子', 49.805410612821845),\n",
       " ('南坪', 23.465811831805492),\n",
       " ('交警', 15.805787932978273),\n",
       " ('坂田', 13.953993984385477),\n",
       " ('黄衣', 13.050903997393533),\n",
       " ('巡防', 11.328810194210376),\n",
       " ('了', 11.012005636840637),\n",
       " ('轻生', 10.382998889874603),\n",
       " ('护栏', 9.32178985133465),\n",
       " ('裸身', 9.302662656256985),\n",
       " ('坂雪岗', 9.302662656256985),\n",
       " ('她', 9.285022817533253),\n",
       " ('约会', 9.267115391016052),\n",
       " ('深圳', 9.139285494790956),\n",
       " ('发现', 8.685059498920872),\n",
       " ('蜀黍', 8.214526567556433),\n",
       " ('网友', 8.126865289542744),\n",
       " ('突然', 8.047379355439626),\n",
       " ('内裤', 7.746360155489698),\n",
       " ('十多分钟', 7.746360155489698),\n",
       " ('着', 7.69376356788892),\n",
       " ('铁骑', 7.496482682273098),\n",
       " ('大概', 7.478906508099729),\n",
       " ('缓慢', 7.465405004419699),\n",
       " ('龙岗', 7.181266975549762),\n",
       " ('快速路', 7.108842630240872),\n",
       " ('大道', 6.863158044709045),\n",
       " ('环城', 6.816586558884396),\n",
       " ('辅警', 6.7921176460503725),\n",
       " ('往前走', 6.722593433531949),\n",
       " ('走', 6.658635364608071),\n",
       " ('视频', 6.65823837544899),\n",
       " ('市民', 6.50820380832565),\n",
       " ('精神病', 6.4895822953890745),\n",
       " ('主干道', 6.456170908383369),\n",
       " ('快速', 6.427950372933541),\n",
       " ('南路', 6.319939268588439),\n",
       " ('陈某', 6.319939268588439),\n",
       " ('情绪', 6.318072634988005),\n",
       " ('接到', 6.212930001065702),\n",
       " ('十字路口', 6.19005765472241),\n",
       " ('车流', 6.178076927344035),\n",
       " ('继续', 6.175118705343049),\n",
       " ('言语', 6.1662592081229946),\n",
       " ('劝说', 6.045884796156362),\n",
       " ('围观', 5.724912424706151),\n",
       " ('中队', 5.676835942971274),\n",
       " ('你', 5.665232674533076),\n",
       " ('停下', 5.6570193656507755),\n",
       " ('要是', 5.4856926184996855),\n",
       " ('还原', 5.475034951489551),\n",
       " ('遭遇', 5.428977234164574),\n",
       " ('这样', 5.38177119137673),\n",
       " ('观望', 5.281214925473439),\n",
       " ('不清', 5.170010805532909),\n",
       " ('接受', 5.151253446183707),\n",
       " ('侵害', 5.122852433378189),\n",
       " ('迷奸', 4.9523613237924735),\n",
       " ('镜头', 4.899868407616082),\n",
       " ('方向', 4.889185836300751),\n",
       " ('衣服', 4.826570449999394),\n",
       " ('也', 4.750174557013863),\n",
       " ('岁', 4.744091394164745),\n",
       " ('早上', 4.7270591963965325),\n",
       " ('此时', 4.696270541416007),\n",
       " ('姑娘', 4.662370084034877),\n",
       " ('男点', 4.651331328128492),\n",
       " ('李赫海', 4.651331328128492),\n",
       " ('一辅警', 4.651331328128492),\n",
       " ('中華云盾', 4.651331328128492),\n",
       " ('刘青递', 4.651331328128492),\n",
       " ('女票', 4.651331328128492),\n",
       " ('刘青停', 4.651331328128492),\n",
       " ('萨摩耶', 4.651331328128492),\n",
       " ('弓常', 4.651331328128492),\n",
       " ('浪荡', 4.651331328128492),\n",
       " ('涟水县', 4.651331328128492),\n",
       " ('披着', 4.651331328128492),\n",
       " ('ZAN', 4.651331328128492),\n",
       " ('劝止', 4.651331328128492),\n",
       " ('申出', 4.651331328128492),\n",
       " ('地逆', 4.651331328128492),\n",
       " ('火心', 4.651331328128492),\n",
       " ('Tomchlee', 4.651331328128492),\n",
       " ('SJ', 4.475240069072811),\n",
       " ('需时', 4.475240069072811),\n",
       " ('瞬间', 4.449640133527835),\n",
       " ('时', 4.428765345685334),\n",
       " ('一边', 4.413012257237489),\n",
       " ('四十分钟', 4.350301332464511),\n",
       " ('一丝不挂', 4.350301332464511),\n",
       " ('下起', 4.350301332464511),\n",
       " ('往下跳', 4.350301332464511),\n",
       " ('到底', 4.269591908465386),\n",
       " ('已经', 4.260101573573226),\n",
       " ('木有', 4.253391319456455),\n",
       " ('辅道', 4.253391319456455),\n",
       " ('睁不开', 4.253391319456455),\n",
       " ('并', 4.111278428408116),\n",
       " ('手要', 4.107263283778217),\n",
       " ('但', 4.098907380663682),\n",
       " ('大清早', 4.04927133680053),\n",
       " ('地往', 4.04927133680053),\n",
       " ('险象环生', 4.04927133680053),\n",
       " ('跳下去', 4.04927133680053),\n",
       " ('被', 4.033649542510729),\n",
       " ('路上', 4.002047609993112),\n",
       " ('拉住', 3.9981188143531488),\n",
       " ('排水沟', 3.9523613237924735),\n",
       " ('雨大', 3.9523613237924735),\n",
       " ('没', 3.9396278224389314),\n",
       " ('很', 3.931408900783627),\n",
       " ('我', 3.920203291368041),\n",
       " ('不羁', 3.9109686386342486),\n",
       " ('真爱', 3.9109686386342486),\n",
       " ('递过来', 3.9109686386342486),\n",
       " ('的', 3.890424627403554),\n",
       " ('微博称', 3.873180077744849),\n",
       " ('44', 3.8706559689873865),\n",
       " ('呢', 3.8573948111893603),\n",
       " ('其有', 3.838417971485637),\n",
       " ('刑警大队', 3.838417971485637),\n",
       " ('愿意', 3.804736933744662),\n",
       " ('警察', 3.800874815492734),\n",
       " ('女方', 3.776270064736792),\n",
       " ('值勤', 3.776270064736792),\n",
       " ('出现', 3.7560113879094406),\n",
       " ('过不去', 3.748241341136549),\n",
       " ('穿衣服', 3.7219124024142),\n",
       " ('开导', 3.7219124024142),\n",
       " ('yan', 3.7219124024142),\n",
       " ('别扭', 3.6970888186891675),\n",
       " ('沿路', 3.6970888186891675),\n",
       " ('赶忙', 3.6970888186891675),\n",
       " ('就', 3.6878522085808467),\n",
       " ('走时', 3.6736077228396447),\n",
       " ('纷纷', 3.6382837341199585),\n",
       " ('冲上去', 3.6301420290585544),\n",
       " ('办法', 3.611846377013398),\n",
       " ('逆行', 3.6099386429702673),\n",
       " ('略带', 3.5721500820808676),\n",
       " ('挣脱', 3.5721500820808676),\n",
       " ('暖', 3.567727680538882),\n",
       " ('碍于', 3.554421315120436),\n",
       " ('原谅', 3.5373879758216558),\n",
       " ('不', 3.5242870574887766),\n",
       " ('警情', 3.4752400690728114),\n",
       " ('尾随', 3.4752400690728114),\n",
       " ('赤裸', 3.4752400690728114),\n",
       " ('帅气', 3.4472113454725677),\n",
       " ('依然', 3.441273880927914),\n",
       " ('418', 3.4208824067502186),\n",
       " ('排起', 3.4208824067502186),\n",
       " ('低落', 3.408293279442198),\n",
       " ('警方', 3.4082855252047977),\n",
       " ('都', 3.4079467568281907),\n",
       " ('电话', 3.3864909592148145),\n",
       " ('驱赶', 3.3503013324645115),\n",
       " ('一众', 3.3503013324645115),\n",
       " ('放慢', 3.3503013324645115),\n",
       " ('小', 3.3501691227697368),\n",
       " ('南平', 3.339577467072738),\n",
       " ('早点', 3.339577467072738),\n",
       " ('援手', 3.329112033394573),\n",
       " ('淡定', 3.29914881001713),\n",
       " ('上身', 3.2711200864168863),\n",
       " ('腼腆', 3.2533913194564548),\n",
       " ('再次出现', 3.2363579801576745),\n",
       " ('意想不到', 3.2280854541916844),\n",
       " ('桦', 3.2041732967862733),\n",
       " ('受挫', 3.196486468119982),\n",
       " ('淮安市', 3.188933330229536),\n",
       " ('从', 3.1671096611590173),\n",
       " ('披上', 3.1461813498085864),\n",
       " ('一位', 3.106760514268685),\n",
       " ('奔走', 3.095028827361205),\n",
       " ('挡住', 3.0890384636720176),\n",
       " ('善良', 3.060266721101993),\n",
       " ('想想', 3.054734232502032),\n",
       " ('小心翼翼', 3.04927133680053),\n",
       " ('长队', 3.028082037730592),\n",
       " ('大暴雨', 3.0128420711738553),\n",
       " ('微博上', 3.0128420711738553),\n",
       " ('裸露', 3.0029713171475607),\n",
       " ('外表', 3.0029713171475607),\n",
       " ('附近', 3.0014567526709657),\n",
       " ('一路上', 2.9885734964469184),\n",
       " ('冲向', 2.9885734964469184),\n",
       " ('念头', 2.9838783752385383),\n",
       " ('还', 2.946049390724077),\n",
       " ('骑着', 2.9353279844936933),\n",
       " ('群众', 2.9332797946217872),\n",
       " ('嘛', 2.9270554585277035),\n",
       " ('什么', 2.9264939088271085),\n",
       " ('奇怪', 2.899282880309054),\n",
       " ('上前', 2.8695759534760237),\n",
       " ('安慰', 2.812482237391237),\n",
       " ('年头', 2.812482237391237),\n",
       " ('而行', 2.7880084680080364),\n",
       " ('女生', 2.759236725438012),\n",
       " ('高峰期', 2.75646167138324),\n",
       " ('高大', 2.72964485264489),\n",
       " ('赶紧', 2.714315220663678),\n",
       " ('聆听', 2.704388057430667),\n",
       " ('期间', 2.687029002932124),\n",
       " ('驻足', 2.678203474528794),\n",
       " ('全身', 2.6736077228396447),\n",
       " ('有', 2.6584688103348446),\n",
       " ('一辈子', 2.649165266371985),\n",
       " ('哥哥', 2.6470099543458496),\n",
       " ('机动车', 2.6219475504432825),\n",
       " ('老家', 2.619922863876868),\n",
       " ('心灵', 2.617907572641543),\n",
       " ('朝着', 2.6099386429702673),\n",
       " ('现场', 2.605858201101714),\n",
       " ('路边', 2.6001788056811113),\n",
       " ('带到', 2.573963422844336),\n",
       " ('举动', 2.5685459578120424),\n",
       " ('扔', 2.5667550501941614),\n",
       " ('恐怕', 2.5631952394279414),\n",
       " ('行进', 2.557909642966257),\n",
       " ('尴尬', 2.554421315120436),\n",
       " ('大雨', 2.5390615597112216),\n",
       " ('遂', 2.5258500624278986),\n",
       " ('穿着', 2.517792419758275),\n",
       " ('旁边', 2.509881554728025),\n",
       " ('远离', 2.499042983745436),\n",
       " ('躺', 2.4975164637839633),\n",
       " ('声称', 2.4975164637839633),\n",
       " ('货车', 2.492968836033243),\n",
       " ('说话', 2.486978472344055),\n",
       " ('点赞', 2.485493703438364),\n",
       " ('派出所', 2.472354380835323),\n",
       " ('脚步', 2.460999629958201),\n",
       " ('这个', 2.4579755135469785),\n",
       " ('靠近', 2.454050770002873),\n",
       " ('后面', 2.4526742411740696),\n",
       " ('盯', 2.449934203808041),\n",
       " ('沿着', 2.4351654258424995),\n",
       " ('上面', 2.433847383914586),\n",
       " ('什么样', 2.4312232400884373),\n",
       " ('耐心', 2.4208824067502186),\n",
       " ('白色', 2.409535896833294),\n",
       " ('紧紧', 2.409535896833294),\n",
       " ('上班', 2.409535896833294),\n",
       " ('重复', 2.3984782971485994),\n",
       " ('暴雨', 2.3912599401434176),\n",
       " ('上去', 2.387695259540384),\n",
       " ('跟随', 2.3680300994249426),\n",
       " ('不时', 2.3680300994249426),\n",
       " ('送往', 2.362411722466766),\n",
       " ('报警', 2.3612967167659744),\n",
       " ('眼睛', 2.3590752567720163),\n",
       " ('异常', 2.3590752567720163),\n",
       " ('您', 2.3568651019668994),\n",
       " ('正值', 2.3481352707080037),\n",
       " ('清晨', 2.3406380157851316),\n",
       " ('康复', 2.328079227956805),\n",
       " ('事发', 2.307922734324635),\n",
       " ('不敢', 2.298184781914513),\n",
       " ('刺激', 2.2849083709025195),\n",
       " ('一名', 2.2786287172647315),\n",
       " ('情况', 2.273036066258414),\n",
       " ('见到', 2.2648323625778395),\n",
       " ('你们', 2.2630524646688532),\n",
       " ('家属', 2.2603962210251134),\n",
       " ('行走', 2.2595144045152438),\n",
       " ('三天', 2.258634374868827),\n",
       " ('一句', 2.2499307873469485),\n",
       " ('听到', 2.226449691497425),\n",
       " ('往', 2.2235068895663668),\n",
       " ('心里', 2.2231965340997037),\n",
       " ('昨日', 2.2191640586859043),\n",
       " ('自己', 2.214774771291172),\n",
       " ('公安局', 2.198778264899567),\n",
       " ('民警', 2.196486468119982),\n",
       " ('周围', 2.1904334853719445),\n",
       " ('场景', 2.1896827600650375),\n",
       " ('话', 2.179267590948998),\n",
       " ('想', 2.1774822070443163),\n",
       " ('回家', 2.1627806116280484),\n",
       " ('到', 2.1497523584585987),\n",
       " ('监控', 2.1455032942736563),\n",
       " ('大队', 2.133475909198464),\n",
       " ('聚集', 2.1308477953877003),\n",
       " ('没有', 2.1292630530088865),\n",
       " ('上', 2.1219500466542325),\n",
       " ('试图', 2.1004917230627074),\n",
       " ('感谢', 2.095028827361205),\n",
       " ('开始', 2.092052563974766),\n",
       " ('遭到', 2.0825431158131456),\n",
       " ('冒', 2.0744143721632855),\n",
       " ('中间', 2.073839528291267),\n",
       " ('大大', 2.0613817268027845),\n",
       " ('说', 2.049245802061725),\n",
       " ('挺', 2.0369614885802036),\n",
       " ('君', 2.034855814239927),\n",
       " ('身上', 2.0244779134617668),\n",
       " ('尝试', 2.0193805018692754),\n",
       " ('危险', 1.9899919881224526),\n",
       " ('吧', 1.9545382430467482),\n",
       " ('然后', 1.945895281543242),\n",
       " ('年龄', 1.943761152030556),\n",
       " ('一辆', 1.9420613671526616),\n",
       " ('治疗', 1.9258280592691768),\n",
       " ('拒', 1.920145620494492),\n",
       " ('家人', 1.9137411618427709),\n",
       " ('牵', 1.9101797292767073),\n",
       " ('寻找', 1.9089990457713442),\n",
       " ('只', 1.908029572792218),\n",
       " ('一只', 1.9046971291909136),\n",
       " ('事情', 1.9027557111975004),\n",
       " ('紧张', 1.8988987188670183),\n",
       " ('离开', 1.8834337121104017),\n",
       " ('到来', 1.8823234571847185),\n",
       " ('吗', 1.8728183163895675),\n",
       " ('感觉', 1.8702943895073605),\n",
       " ('车辆', 1.8649348667561882),\n",
       " ('限制', 1.864579905982931),\n",
       " ('根本', 1.8575409434376737),\n",
       " ('反映', 1.833435570966697),\n",
       " ('几个', 1.831129868642852),\n",
       " ('该', 1.8266086115180598),\n",
       " ('透露', 1.8255807467804646),\n",
       " ('地', 1.8182999882820219),\n",
       " ('关键词', 1.8165928092246513),\n",
       " ('帅', 1.8003789283349996),\n",
       " ('其实', 1.7994617273987261),\n",
       " ('速度', 1.7868202470701005),\n",
       " ('只能', 1.7820996083975162),\n",
       " ('些', 1.78159152381527),\n",
       " ('那么', 1.7620296256221821),\n",
       " ('去', 1.7578725340929844),\n",
       " ('出口', 1.747969991873174),\n",
       " ('姓', 1.7401737193885158),\n",
       " ('一份', 1.739907362752198),\n",
       " ('下来', 1.7186039608269632),\n",
       " ('另外', 1.6973301604469222),\n",
       " ('湖北', 1.6731508111910784),\n",
       " ('上午', 1.669965819049948),\n",
       " ('青年', 1.659662320748544),\n",
       " ('随后', 1.645721882768212),\n",
       " ('或者', 1.632422883812165),\n",
       " ('医院', 1.6286967881843735),\n",
       " ('面对', 1.6211365427717412),\n",
       " ('当时', 1.6157015003380535),\n",
       " ('大家', 1.603861753508636),\n",
       " ('作出', 1.6034726007210356),\n",
       " ('某', 1.5996001320686428),\n",
       " ('36', 1.5992147775784944),\n",
       " ('后', 1.5830759646797947),\n",
       " ('90', 1.5796333829068783),\n",
       " ('来说', 1.5787138515832557),\n",
       " ('产生', 1.5759668817552075),\n",
       " ('起来', 1.5545950676660236),\n",
       " ('控制', 1.5525146110795511),\n",
       " ('坐', 1.5492408026166558),\n",
       " ('穿', 1.5330666020390131),\n",
       " ('和', 1.5243340291611516),\n",
       " ('但是', 1.5230936573593052),\n",
       " ('标题', 1.5214803773395824),\n",
       " ('i', 1.5036550038873937),\n",
       " ('南', 1.499637037997105),\n",
       " ('导致', 1.4940256978005262),\n",
       " ('跑', 1.4923660677450823),\n",
       " ('原因', 1.4901131084374761),\n",
       " ('跟', 1.481069612733535),\n",
       " ('看到', 1.4469399962091927),\n",
       " ('不少', 1.4308309825137626),\n",
       " ('关于', 1.423958885838856),\n",
       " ('雨', 1.4122822349883009),\n",
       " ('为了', 1.4080451820450464),\n",
       " ('会', 1.399238623728092),\n",
       " ('16', 1.3983375078280595),\n",
       " ('存在', 1.3926940454044159),\n",
       " ('追', 1.3887615949109426),\n",
       " ('事', 1.3790139567525608),\n",
       " ('帮助', 1.3738367185174805),\n",
       " ('男子', 1.3700706410734795),\n",
       " ('员', 1.3697851181993932),\n",
       " ('一起', 1.3670134126978826),\n",
       " ('交流', 1.3570856119903743),\n",
       " ('据', 1.3432473005755838),\n",
       " ('这一', 1.332850602953975),\n",
       " ('令', 1.3271517984105927),\n",
       " ('其', 1.3209198466540129),\n",
       " ('停', 1.3098968035503522),\n",
       " ('去年', 1.2942544882860807),\n",
       " ('就是', 1.2374450757988886),\n",
       " ('不断', 1.235690348232338),\n",
       " ('一路', 1.2244948743249844),\n",
       " ('希望', 1.2148506331189974),\n",
       " ('住', 1.197020139980926),\n",
       " ('正在', 1.1947375778840845),\n",
       " ('手', 1.1873304484373264),\n",
       " ('发生', 1.1824672879803046),\n",
       " ('了解', 1.1690295609050496),\n",
       " ('50', 1.1678866800299572),\n",
       " ('为', 1.1607802604541433),\n",
       " ('要', 1.1560692992858268),\n",
       " ('爱', 1.1554402484623048),\n",
       " ('可能', 1.1455032942736563),\n",
       " ('陈', 1.138313602796874),\n",
       " ('当', 1.1360880308917092),\n",
       " ('那', 1.1350604453991524),\n",
       " ('史', 1.1277149090741216),\n",
       " ('号', 1.1255740849761815),\n",
       " ('拍', 1.1204915495119718),\n",
       " ('25', 1.1140160550164828),\n",
       " ('才', 1.1139530452982869),\n",
       " ('进入', 1.1128832764182752),\n",
       " ('介绍', 1.1120669921810373),\n",
       " ('他们', 1.1044803263470984),\n",
       " ('可以', 1.0866652638764032),\n",
       " ('花', 1.0686998886388561),\n",
       " ('提供', 1.0659270041635354),\n",
       " ('把', 1.059432341437268),\n",
       " ('连', 1.0414169180424948),\n",
       " ('人', 1.0398762897471812),\n",
       " ('将', 1.0305857067286253),\n",
       " ('同时', 1.0135915010093561),\n",
       " ('分', 0.9973828174544938),\n",
       " ('透', 0.99720293686668),\n",
       " ('今年', 0.966216859081953),\n",
       " ('记者', 0.9271998038792411),\n",
       " ('让', 0.9137014294899777),\n",
       " ('目前', 0.8933662302670573),\n",
       " ('问', 0.879670368779605),\n",
       " ('看', 0.8770699049091711),\n",
       " ('原', 0.8745938334104167),\n",
       " ('表示', 0.8634105895744374),\n",
       " ('一个', 0.8556598221824707),\n",
       " ('因', 0.8181204478458837),\n",
       " ('系', 0.7946628445169575),\n",
       " ('带', 0.7763279745284514),\n",
       " ('6', 0.7622602583437212),\n",
       " ('好', 0.7288653828300791),\n",
       " ('拉', 0.7275952497445629),\n",
       " ('进行', 0.7263804392128818),\n",
       " ('起', 0.7202295824958537),\n",
       " ('一', 0.710829003592252),\n",
       " ('他', 0.7074907017272314),\n",
       " ('正', 0.6973060202350319),\n",
       " ('可', 0.6842515939839953),\n",
       " ('最', 0.6400993178091264),\n",
       " ('天', 0.6235944942009486),\n",
       " ('能', 0.6185111786899286),\n",
       " ('里', 0.6039006879729503),\n",
       " ('等', 0.5441043941837564),\n",
       " ('中', 0.5156135775503206),\n",
       " ('个', 0.5035468301229501),\n",
       " ('这', 0.5000074536188772),\n",
       " ('与', 0.49074275983845767),\n",
       " ('多', 0.4809962583744546),\n",
       " ('前', 0.4735784562858743),\n",
       " ('7', 0.45891756623126934),\n",
       " ('来', 0.45742792557574563),\n",
       " ('是', 0.4069428640413574),\n",
       " ('在', 0.32985711253084343),\n",
       " ('大', 0.3132734527087363),\n",
       " ('照片', 0.24212545393891896),\n",
       " ('20', 0.1475474522482),\n",
       " ('月', 0.06974313771994531),\n",
       " ('日', 0.05085505597918966)]"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "shenzhen_social_news"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "wordcloud_with_mask = wordcloud.WordCloud(\n",
    "font_path=r'D:\\Github\\Data\\SourceHanSerifSC-Regular.otf', \n",
    "mask=np.array(Image.open(r'D:\\Github\\Data\\0350050023.jpg'))\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x20914496828>"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(wc.generate_from_frequencies({w:s for w, s in shenzhen_social_news[:20]}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x209149b5e10>"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(wordcloud_with_mask.generate_from_frequencies({w:s for w, s in shenzhen_social_news[:20]}))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## TFIDF Vectorizezd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.feature_extraction.text import TfidfVectorizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "vectorized = TfidfVectorizer(max_features=10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_num = 50000\n",
    "sub_samples = news_content[:sample_num]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = vectorized.fit_transform(sub_samples)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(50000, 10000)"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'此外': 6195,\n",
       " '本周': 5892,\n",
       " '12': 35,\n",
       " '小米': 3974,\n",
       " '手机': 4878,\n",
       " '15': 46,\n",
       " '其余': 1844,\n",
       " '暂停': 5738,\n",
       " '更新': 5760,\n",
       " '发布': 2635,\n",
       " '开发': 4405,\n",
       " '影响': 4525,\n",
       " '确保': 7338,\n",
       " '工程师': 4132,\n",
       " '可以': 2734,\n",
       " '集中': 9631,\n",
       " '全部': 1743,\n",
       " '精力': 7662,\n",
       " '进行': 9141,\n",
       " '工作': 4113,\n",
       " '有人': 5808,\n",
       " '猜测': 6880,\n",
       " '主要': 912,\n",
       " '研发': 7319,\n",
       " '之中': 933,\n",
       " '去年': 2558,\n",
       " '一年': 302,\n",
       " '时候': 5628,\n",
       " '当然': 4505,\n",
       " '关于': 1819,\n",
       " '信息': 1546,\n",
       " '我们': 4802,\n",
       " '还是': 9082,\n",
       " '等待': 7607,\n",
       " '作为': 1440,\n",
       " '唯一': 2966,\n",
       " '通过': 9249,\n",
       " '10': 12,\n",
       " '平台': 4255,\n",
       " '认证': 8554,\n",
       " '处理器': 3331,\n",
       " '强调': 4481,\n",
       " '不会': 551,\n",
       " '因为': 3045,\n",
       " '考虑': 7980,\n",
       " '性能': 4642,\n",
       " '核心': 6069,\n",
       " '相反': 7212,\n",
       " '他们': 1242,\n",
       " '联手': 8020,\n",
       " '微软': 4579,\n",
       " '找到': 4949,\n",
       " '一种': 344,\n",
       " '适合': 9193,\n",
       " '兼顾': 1864,\n",
       " '完美': 3783,\n",
       " '方案': 5537,\n",
       " '报道': 5026,\n",
       " '已经': 4156,\n",
       " '拿到': 5092,\n",
       " '一些': 253,\n",
       " '以便': 1259,\n",
       " '更好': 5757,\n",
       " '理解': 6966,\n",
       " '架构': 6022,\n",
       " '资料': 8791,\n",
       " '显示': 5703,\n",
       " '一款': 332,\n",
       " '集成': 9638,\n",
       " '传统': 1355,\n",
       " '节省': 8201,\n",
       " '至少': 8132,\n",
       " '30': 103,\n",
       " '空间': 7498,\n",
       " '按计划': 5124,\n",
       " '今年': 1217,\n",
       " '联想': 8019,\n",
       " '首发': 9825,\n",
       " '电脑': 7067,\n",
       " '预计': 9745,\n",
       " '形态': 4513,\n",
       " '产品': 1135,\n",
       " '只是': 2728,\n",
       " '开始': 4412,\n",
       " '未来': 5886,\n",
       " '也许': 982,\n",
       " '见到': 8475,\n",
       " '三星': 443,\n",
       " '华为': 2417,\n",
       " '澎湃': 6699,\n",
       " '进入': 9123,\n",
       " '此前': 6193,\n",
       " '搭载': 5252,\n",
       " '电池': 7063,\n",
       " '规格': 8495,\n",
       " '至于': 8129,\n",
       " '可能': 2741,\n",
       " '所说': 4870,\n",
       " '设定': 8585,\n",
       " '有关': 5810,\n",
       " '按照': 5122,\n",
       " '目前': 7188,\n",
       " '掌握': 5160,\n",
       " '拥有': 5083,\n",
       " '摄像头': 5256,\n",
       " '惊喜': 4717,\n",
       " '根据': 6078,\n",
       " '京东': 1144,\n",
       " '泄露': 6406,\n",
       " '售价': 2964,\n",
       " '应该': 4344,\n",
       " '某个': 6025,\n",
       " '这是': 9105,\n",
       " '18': 53,\n",
       " '葡萄牙': 8322,\n",
       " '中部': 858,\n",
       " '地区': 3168,\n",
       " '拍摄': 5064,\n",
       " '森林': 6119,\n",
       " '大火': 3485,\n",
       " '汽车': 6355,\n",
       " '新华社': 5489,\n",
       " '记者': 8569,\n",
       " '标题': 6055,\n",
       " '44': 125,\n",
       " '女子': 3625,\n",
       " '深圳': 6576,\n",
       " '网友': 7888,\n",
       " '暴雨': 5748,\n",
       " '交警': 1120,\n",
       " '昨日': 5694,\n",
       " '清晨': 6604,\n",
       " '发现': 2647,\n",
       " '行走': 8392,\n",
       " '快速': 4622,\n",
       " '期间': 5881,\n",
       " '赶紧': 8852,\n",
       " '一路': 365,\n",
       " '那么': 9299,\n",
       " '事发': 1024,\n",
       " '到底': 2154,\n",
       " '发生': 2649,\n",
       " '什么': 1208,\n",
       " '一起': 364,\n",
       " '还原': 9081,\n",
       " '现场': 6927,\n",
       " '大队': 3517,\n",
       " '中队': 863,\n",
       " '女生': 3631,\n",
       " '一位': 259,\n",
       " '高大': 9919,\n",
       " '说话': 8668,\n",
       " '90': 184,\n",
       " '青年': 9672,\n",
       " '介绍': 1224,\n",
       " '16': 49,\n",
       " '早上': 5617,\n",
       " '36': 113,\n",
       " '正在': 6180,\n",
       " '附近': 9550,\n",
       " '接到': 5177,\n",
       " '机动车': 5928,\n",
       " '危险': 2511,\n",
       " '随后': 9602,\n",
       " '寻找': 3932,\n",
       " '大概': 3476,\n",
       " '大道': 3511,\n",
       " '出口': 1998,\n",
       " '方向': 5535,\n",
       " '身上': 8929,\n",
       " '另外': 2722,\n",
       " '一名': 276,\n",
       " '情绪': 4714,\n",
       " '尝试': 3996,\n",
       " '交流': 1115,\n",
       " '离开': 7403,\n",
       " '愿意': 4764,\n",
       " '接受': 5179,\n",
       " '继续': 7832,\n",
       " '缓慢': 7862,\n",
       " '此时': 6197,\n",
       " '路边': 8918,\n",
       " '聚集': 8034,\n",
       " '市民': 4192,\n",
       " '围观': 3065,\n",
       " '为了': 874,\n",
       " '刺激': 2179,\n",
       " '一边': 370,\n",
       " '群众': 7950,\n",
       " '警方': 8538,\n",
       " '提供': 5215,\n",
       " '一份': 257,\n",
       " '视频': 8509,\n",
       " '了解': 1007,\n",
       " '25': 95,\n",
       " '出现': 2021,\n",
       " '监控': 7165,\n",
       " '穿着': 7502,\n",
       " '白色': 7140,\n",
       " '沿着': 6403,\n",
       " '当时': 4502,\n",
       " '正值': 6179,\n",
       " '上班': 495,\n",
       " '高峰期': 9927,\n",
       " '路上': 8911,\n",
       " '纷纷': 7737,\n",
       " '驻足': 9885,\n",
       " '观望': 8485,\n",
       " '不少': 576,\n",
       " '车辆': 8955,\n",
       " '速度': 9253,\n",
       " '脚步': 8077,\n",
       " '依然': 1483,\n",
       " '行进': 8393,\n",
       " '中间': 861,\n",
       " '一辆': 368,\n",
       " '货车': 8755,\n",
       " '镜头': 9454,\n",
       " '但是': 1379,\n",
       " '全身': 1740,\n",
       " '朝着': 5865,\n",
       " '周围': 2907,\n",
       " '没有': 6373,\n",
       " '或者': 4811,\n",
       " '上前': 462,\n",
       " '看到': 7244,\n",
       " '这样': 9107,\n",
       " '情况': 4708,\n",
       " '恐怕': 4678,\n",
       " '大家': 3459,\n",
       " '办法': 2232,\n",
       " '面对': 9693,\n",
       " '这一': 9085,\n",
       " '表示': 8421,\n",
       " '根本': 6079,\n",
       " '不敢': 588,\n",
       " '心里': 4603,\n",
       " '感觉': 4760,\n",
       " '尴尬': 4014,\n",
       " '跟随': 8905,\n",
       " '作出': 1441,\n",
       " '举动': 919,\n",
       " '突然': 7511,\n",
       " '靠近': 9687,\n",
       " '上面': 510,\n",
       " '控制': 5190,\n",
       " '远离': 9146,\n",
       " '衣服': 8404,\n",
       " '只能': 2730,\n",
       " '紧紧': 7691,\n",
       " '一只': 272,\n",
       " '后面': 2867,\n",
       " '耐心': 7989,\n",
       " '安慰': 3766,\n",
       " '听到': 2879,\n",
       " '不断': 589,\n",
       " '重复': 9364,\n",
       " '一句': 271,\n",
       " '要是': 8468,\n",
       " '遭遇': 9288,\n",
       " '不时': 593,\n",
       " '试图': 8626,\n",
       " '大暴雨': 3472,\n",
       " '眼睛': 7270,\n",
       " '瞬间': 7288,\n",
       " '帮助': 4224,\n",
       " '大雨': 3519,\n",
       " '来说': 5995,\n",
       " '回家': 3029,\n",
       " '然后': 6774,\n",
       " '照片': 6781,\n",
       " '旁边': 5546,\n",
       " '场景': 3196,\n",
       " '下来': 525,\n",
       " '带到': 4212,\n",
       " '派出所': 6470,\n",
       " '姑娘': 3669,\n",
       " '什么样': 1209,\n",
       " '事情': 1029,\n",
       " '透露': 9219,\n",
       " '湖北': 6645,\n",
       " '家属': 3883,\n",
       " '反映': 2615,\n",
       " '三天': 437,\n",
       " '陈某': 9557,\n",
       " '老家': 7963,\n",
       " '导致': 3939,\n",
       " '异常': 4441,\n",
       " '产生': 1139,\n",
       " '送往': 9191,\n",
       " '医院': 2382,\n",
       " '治疗': 6400,\n",
       " '大大': 3452,\n",
       " '希望': 4207,\n",
       " '康复': 4363,\n",
       " '其实': 1846,\n",
       " '到来': 2156,\n",
       " '存在': 3707,\n",
       " '年龄': 4296,\n",
       " '限制': 9577,\n",
       " '你们': 1451,\n",
       " '原因': 2542,\n",
       " '这个': 9086,\n",
       " '哥哥': 2953,\n",
       " '一辈子': 369,\n",
       " '自己': 8099,\n",
       " '家人': 3878,\n",
       " '同时': 2831,\n",
       " '感谢': 4761,\n",
       " '聆听': 7996,\n",
       " '心灵': 4598,\n",
       " '点赞': 6745,\n",
       " '警察': 8534,\n",
       " '就是': 4005,\n",
       " '男子': 7080,\n",
       " '20': 64,\n",
       " '50': 132,\n",
       " '上午': 464,\n",
       " '公安局': 1771,\n",
       " '一个': 247,\n",
       " '报警': 5025,\n",
       " '电话': 7072,\n",
       " '声称': 3321,\n",
       " '遭到': 9286,\n",
       " '侵害': 1492,\n",
       " '几个': 1975,\n",
       " '关键词': 1834,\n",
       " '民警': 6287,\n",
       " '紧张': 7688,\n",
       " '起来': 8855,\n",
       " '受到': 2677,\n",
       " 'a股': 198,\n",
       " '纳入': 7730,\n",
       " 'msci': 219,\n",
       " '指数': 5115,\n",
       " '利好': 2136,\n",
       " '消息': 6544,\n",
       " '市场': 4178,\n",
       " '周三': 2901,\n",
       " '再度': 1884,\n",
       " '上演': 494,\n",
       " '行情': 8383,\n",
       " '周四': 2906,\n",
       " '金融股': 9409,\n",
       " '白马股': 7143,\n",
       " '表现': 8420,\n",
       " '尾盘': 4030,\n",
       " '跳水': 8922,\n",
       " '之后': 940,\n",
       " '金融': 9400,\n",
       " '板块': 6001,\n",
       " '状态': 6865,\n",
       " '分析': 2060,\n",
       " '人士': 1172,\n",
       " '认为': 8548,\n",
       " '受益': 2685,\n",
       " '估值': 1374,\n",
       " '资金': 8803,\n",
       " '青睐': 9679,\n",
       " '存量': 3711,\n",
       " '博弈': 2476,\n",
       " '格局': 6082,\n",
       " '风格': 9784,\n",
       " '震荡': 9662,\n",
       " '延续': 4373,\n",
       " '流动性': 6477,\n",
       " '改善': 5333,\n",
       " '经济': 7779,\n",
       " '预期': 9738,\n",
       " '有助于': 5814,\n",
       " '支撑': 5301,\n",
       " '大盘': 3490,\n",
       " '逐步': 9222,\n",
       " '再现': 1887,\n",
       " '未能': 5889,\n",
       " '上行': 501,\n",
       " '态势': 4629,\n",
       " '两市': 710,\n",
       " '成交': 4777,\n",
       " '小幅': 3964,\n",
       " '放量': 5367,\n",
       " '29': 102,\n",
       " '中信': 757,\n",
       " '一级': 352,\n",
       " '行业': 8375,\n",
       " '收盘': 5320,\n",
       " '银行': 9434,\n",
       " '两个': 688,\n",
       " '分别': 2045,\n",
       " '上涨': 490,\n",
       " '80': 171,\n",
       " '二级': 1048,\n",
       " '来看': 5991,\n",
       " '股份制': 8046,\n",
       " '涨幅': 6563,\n",
       " '最高': 5797,\n",
       " '达到': 9021,\n",
       " '22': 91,\n",
       " '82': 175,\n",
       " '信托': 1552,\n",
       " '及其': 2586,\n",
       " '64': 152,\n",
       " '保险': 1536,\n",
       " '34': 109,\n",
       " '证券': 8598,\n",
       " '06': 8,\n",
       " '成分股': 4783,\n",
       " '共有': 1814,\n",
       " '21': 90,\n",
       " '其中': 1841,\n",
       " '最大': 5785,\n",
       " '66': 154,\n",
       " '贵阳': 8783,\n",
       " '65': 153,\n",
       " '超过': 8873,\n",
       " '17': 51,\n",
       " '个股': 749,\n",
       " '中国': 771,\n",
       " '居前': 4042,\n",
       " '两名': 696,\n",
       " '57': 141,\n",
       " '04': 6,\n",
       " '新华': 5488,\n",
       " '券商': 2178,\n",
       " '下跌': 537,\n",
       " '近期': 9073,\n",
       " '宣布': 3868,\n",
       " '2018': 84,\n",
       " '新兴': 5483,\n",
       " '群体': 7951,\n",
       " '团队': 3055,\n",
       " '指出': 5104,\n",
       " '最新': 5790,\n",
       " '包含': 2322,\n",
       " '222': 92,\n",
       " '市值': 4175,\n",
       " '互联互通': 1065,\n",
       " '交易': 1106,\n",
       " '股票': 8051,\n",
       " '以及': 1264,\n",
       " '停牌': 1611,\n",
       " '标的': 6051,\n",
       " '由于': 7033,\n",
       " '很多': 4546,\n",
       " '权重': 5947,\n",
       " '上升': 463,\n",
       " '73': 163,\n",
       " '40': 119,\n",
       " '11': 24,\n",
       " '消费': 6547,\n",
       " '24': 94,\n",
       " '26': 98,\n",
       " '涵盖': 6564,\n",
       " '大部分': 3513,\n",
       " '动态': 2278,\n",
       " '加入': 2243,\n",
       " '增加': 3294,\n",
       " '其他': 1842,\n",
       " '尽管': 4028,\n",
       " '事件': 1018,\n",
       " '短期': 7300,\n",
       " '有所': 5820,\n",
       " '提振': 5224,\n",
       " '中长期': 860,\n",
       " '海外': 6515,\n",
       " '增量': 3308,\n",
       " '升温': 2402,\n",
       " '短期内': 7301,\n",
       " '不能': 606,\n",
       " '有效': 5821,\n",
       " '放大': 5356,\n",
       " '情景': 4713,\n",
       " '难以': 9617,\n",
       " '持续': 5097,\n",
       " '改变': 5332,\n",
       " '并未': 4302,\n",
       " '引起': 4448,\n",
       " '热情': 6755,\n",
       " '成交量': 4778,\n",
       " '较为': 8992,\n",
       " '较大': 8994,\n",
       " '变化': 2693,\n",
       " '成长': 4800,\n",
       " '全天': 1722,\n",
       " '低迷': 1391,\n",
       " '表明': 8417,\n",
       " '很少': 4549,\n",
       " '不同': 567,\n",
       " '之间': 955,\n",
       " '使得': 1457,\n",
       " '突破': 7512,\n",
       " '中期': 831,\n",
       " '依旧': 1479,\n",
       " '维持': 7840,\n",
       " '虽然': 8354,\n",
       " '至今': 8130,\n",
       " '夏普': 3351,\n",
       " '智能手机': 5737,\n",
       " '无法': 5568,\n",
       " '完全': 3776,\n",
       " '2013': 79,\n",
       " '退出': 9186,\n",
       " '月份': 5800,\n",
       " '官方': 3791,\n",
       " '回归': 3031,\n",
       " '预示': 9741,\n",
       " '很快': 4551,\n",
       " '登场': 7127,\n",
       " '登陆': 7132,\n",
       " '怎么样': 4633,\n",
       " '近日': 9072,\n",
       " '型号': 3221,\n",
       " '神秘': 7378,\n",
       " '悄然': 4695,\n",
       " '相关': 7211,\n",
       " '并非': 4305,\n",
       " '定位': 3798,\n",
       " '配备': 9333,\n",
       " '最受': 5782,\n",
       " '芯片': 8212,\n",
       " '之一': 930,\n",
       " '采用': 9343,\n",
       " '14': 43,\n",
       " '工艺': 4135,\n",
       " '设计': 8591,\n",
       " '当前': 4492,\n",
       " '只有': 2729,\n",
       " '上市': 474,\n",
       " '销售': 9440,\n",
       " '改进': 5340,\n",
       " '明显': 5665,\n",
       " '所以': 4859,\n",
       " '放在': 5355,\n",
       " '变成': 2697,\n",
       " '高端': 9945,\n",
       " '不过': 615,\n",
       " '签署': 7621,\n",
       " '协议': 2434,\n",
       " '时间': 5649,\n",
       " '既然': 5582,\n",
       " '测试': 6490,\n",
       " '说明': 8666,\n",
       " '只要': 2731,\n",
       " '时期': 5636,\n",
       " '新品': 5494,\n",
       " '之前': 938,\n",
       " '曝光': 5750,\n",
       " '竞争': 7528,\n",
       " '优势': 1316,\n",
       " '全面': 1746,\n",
       " '推出': 5197,\n",
       " '全球': 1732,\n",
       " '多达': 3421,\n",
       " '28': 101,\n",
       " '媒体': 3694,\n",
       " '沟通': 6369,\n",
       " '会上': 1330,\n",
       " '各位': 2777,\n",
       " '时代': 5626,\n",
       " '成为': 4776,\n",
       " '沙漠': 6365,\n",
       " '有利': 5811,\n",
       " '消化': 6542,\n",
       " '开盘': 4428,\n",
       " '上证': 502,\n",
       " '蓝筹': 8339,\n",
       " '带动': 4213,\n",
       " '一度': 304,\n",
       " '站上': 7526,\n",
       " '60': 145,\n",
       " '120': 36,\n",
       " '均线': 3201,\n",
       " '万达': 420,\n",
       " '电影': 7059,\n",
       " '暴跌': 5747,\n",
       " '拖累': 5070,\n",
       " '绝大多数': 7820,\n",
       " '大幅': 3467,\n",
       " '各大': 2781,\n",
       " '全线': 1737,\n",
       " '不见': 611,\n",
       " '不可': 564,\n",
       " '短线': 7304,\n",
       " '策略': 7612,\n",
       " '题材': 9771,\n",
       " '为主': 873,\n",
       " '区域': 2365,\n",
       " '概念股': 6130,\n",
       " '调整': 8685,\n",
       " '压力': 2531,\n",
       " '仍然': 1225,\n",
       " '突出': 7506,\n",
       " '再次': 1886,\n",
       " '大跌': 3507,\n",
       " '处于': 3323,\n",
       " '底部': 4348,\n",
       " '低位': 1386,\n",
       " '反复': 2606,\n",
       " '夯实': 3563,\n",
       " '蓝筹股': 8340,\n",
       " '承压': 4953,\n",
       " '后期': 2862,\n",
       " '需要': 9658,\n",
       " '接力': 5178,\n",
       " '走向': 8835,\n",
       " '今日': 1221,\n",
       " '要闻': 8471,\n",
       " '央行': 3561,\n",
       " '上海': 486,\n",
       " '总部': 4671,\n",
       " '债券': 1582,\n",
       " '北向': 2345,\n",
       " '境外': 3287,\n",
       " '投资者': 4994,\n",
       " '准入': 1957,\n",
       " '备案': 3339,\n",
       " '业务': 661,\n",
       " '指引': 5110,\n",
       " '我国': 4804,\n",
       " '信用': 1553,\n",
       " '法规': 6428,\n",
       " '标准': 6042,\n",
       " '研究': 7320,\n",
       " '加快': 2252,\n",
       " '推进': 5207,\n",
       " '房地产': 4851,\n",
       " '研究院': 7326,\n",
       " '房贷利率': 4856,\n",
       " '楼市': 6126,\n",
       " '报告': 5018,\n",
       " '许多': 8578,\n",
       " '城市': 3231,\n",
       " '个人': 739,\n",
       " '住房贷款': 1395,\n",
       " '利率': 2143,\n",
       " '程度': 7468,\n",
       " '水污染': 6316,\n",
       " '修正案': 1562,\n",
       " '草案': 8260,\n",
       " '二审': 1038,\n",
       " '更大': 5756,\n",
       " '力度': 2222,\n",
       " '保护': 1524,\n",
       " '环境': 6909,\n",
       " '结算': 7813,\n",
       " '开展': 4415,\n",
       " '一人': 254,\n",
       " '多户': 3404,\n",
       " '通知': 9238,\n",
       " '启动': 2883,\n",
       " '同一': 2821,\n",
       " '以上': 1256,\n",
       " '账户': 8749,\n",
       " '文件': 5442,\n",
       " '要求': 8469,\n",
       " '23': 93,\n",
       " '日后': 5589,\n",
       " '交易日': 1111,\n",
       " '确认': 7343,\n",
       " '十三': 2383,\n",
       " '金融市场': 9404,\n",
       " '交易额': 1113,\n",
       " '2000': 66,\n",
       " '万亿': 393,\n",
       " '宏观': 3785,\n",
       " '稳定': 7479,\n",
       " '双重': 2604,\n",
       " '因素': 3049,\n",
       " '鼓舞': 9994,\n",
       " '国际': 3117,\n",
       " '基金': 3266,\n",
       " '经理': 7789,\n",
       " '2017': 83,\n",
       " '下半年': 516,\n",
       " '股市': 8047,\n",
       " '有望': 5824,\n",
       " '十年': 2392,\n",
       " '增长': 3309,\n",
       " '创新': 2115,\n",
       " '驱动': 9879,\n",
       " '回顾': 3043,\n",
       " '早盘': 5625,\n",
       " '冲高': 1944,\n",
       " '回落': 3039,\n",
       " '走势': 8834,\n",
       " '盘面': 7177,\n",
       " '300': 104,\n",
       " '盘中': 7175,\n",
       " '新高': 5531,\n",
       " '分化': 2047,\n",
       " '相当': 7218,\n",
       " '45': 126,\n",
       " '较前': 8993,\n",
       " '76': 166,\n",
       " '跌幅': 8893,\n",
       " '101': 15,\n",
       " '97': 192,\n",
       " '98': 193,\n",
       " '创业板': 2105,\n",
       " '38': 116,\n",
       " '400': 120,\n",
       " '品种': 2939,\n",
       " '计算': 8545,\n",
       " 'st': 237,\n",
       " '涨停': 6562,\n",
       " '不足': 614,\n",
       " '亿元': 1202,\n",
       " '800': 172,\n",
       " '数据': 5424,\n",
       " '主力': 888,\n",
       " '流出': 6475,\n",
       " '一日': 317,\n",
       " '96': 191,\n",
       " '95': 190,\n",
       " '27': 99,\n",
       " '61': 148,\n",
       " '抛售': 5002,\n",
       " '13': 40,\n",
       " '介入': 1223,\n",
       " '医药': 2381,\n",
       " '制造': 2173,\n",
       " '雄安': 9625,\n",
       " '新区': 5487,\n",
       " '更是': 5761,\n",
       " '高达': 9954,\n",
       " '41': 122,\n",
       " '69': 157,\n",
       " '技术': 4963,\n",
       " '临近': 870,\n",
       " '半个': 2409,\n",
       " '小时': 3969,\n",
       " '高位': 9910,\n",
       " '留下': 7094,\n",
       " '以来': 1268,\n",
       " '每次': 6241,\n",
       " '回调': 3040,\n",
       " '相对': 7216,\n",
       " '位置': 1383,\n",
       " '即使': 2512,\n",
       " '乏力': 962,\n",
       " '总体': 4647,\n",
       " '打破': 4906,\n",
       " '攻克': 5345,\n",
       " '当日': 4501,\n",
       " '上方': 479,\n",
       " '触及': 8526,\n",
       " '无疑': 5570,\n",
       " '心理': 4599,\n",
       " '负面影响': 8729,\n",
       " '分钟': 2077,\n",
       " '级别': 7718,\n",
       " '形成': 4514,\n",
       " '一旦': 318,\n",
       " '跌破': 8894,\n",
       " '意味着': 4737,\n",
       " '如此': 3660,\n",
       " '引发': 4443,\n",
       " '综合': 7845,\n",
       " '处在': 3326,\n",
       " '区间': 2367,\n",
       " '脆弱': 8076,\n",
       " '心态': 4595,\n",
       " '碎片': 7345,\n",
       " '主线': 908,\n",
       " '模糊': 6142,\n",
       " '热点': 6760,\n",
       " '赚钱': 8810,\n",
       " '效应': 5389,\n",
       " '以下': 1257,\n",
       " '首先': 9824,\n",
       " '长期': 9468,\n",
       " '人气': 1193,\n",
       " '最近': 5795,\n",
       " '一段时间': 335,\n",
       " '整体': 5433,\n",
       " '走高': 8847,\n",
       " '基础': 3260,\n",
       " '弹性': 4466,\n",
       " '制约': 2169,\n",
       " '绝对': 7822,\n",
       " '大面积': 3521,\n",
       " '与此同时': 621,\n",
       " '现在': 6926,\n",
       " '非常': 9683,\n",
       " '频繁': 9767,\n",
       " '今天': 1216,\n",
       " '明天': 5661,\n",
       " '就要': 4009,\n",
       " '打击': 4896,\n",
       " '积极性': 7452,\n",
       " '其次': 1847,\n",
       " '反弹': 2612,\n",
       " '重要': 9378,\n",
       " '拉升': 5047,\n",
       " '这种': 9111,\n",
       " '大涨': 3482,\n",
       " '似乎': 1378,\n",
       " '一直': 343,\n",
       " '吸引': 2888,\n",
       " '加码': 2264,\n",
       " '中小': 808,\n",
       " '面临': 9688,\n",
       " '强大': 4475,\n",
       " '午后': 2407,\n",
       " '复星': 3344,\n",
       " '收复': 5315,\n",
       " '投资': 4992,\n",
       " '建议': 4393,\n",
       " '始终': 3666,\n",
       " '缺乏': 7880,\n",
       " '支持': 5297,\n",
       " '背景': 8060,\n",
       " '后续': 2865,\n",
       " '跟上': 8901,\n",
       " '活跃': 6467,\n",
       " '降低': 9564,\n",
       " '配置': 9335,\n",
       " '加大': 2246,\n",
       " '纠缠': 7701,\n",
       " '促使': 1505,\n",
       " '能否': 8071,\n",
       " '真正': 7262,\n",
       " '观察': 8482,\n",
       " '基于': 3244,\n",
       " '组合': 7751,\n",
       " '因此': 3047,\n",
       " '股指': 8048,\n",
       " '下方': 523,\n",
       " '获得': 8282,\n",
       " '操作': 5288,\n",
       " '粤港澳': 7659,\n",
       " '大湾': 3483,\n",
       " '论坛': 8580,\n",
       " '腾讯': 8088,\n",
       " '人工智能': 1178,\n",
       " '百度': 7150,\n",
       " '举办': 918,\n",
       " 'ai': 196,\n",
       " '开发者': 4408,\n",
       " '大会': 3430,\n",
       " '亚马逊': 1093,\n",
       " '代表': 1251,\n",
       " '互联网': 1066,\n",
       " '巨头': 4144,\n",
       " '一致': 358,\n",
       " '看好': 7245,\n",
       " '发展': 2629,\n",
       " '产业': 1126,\n",
       " '叠加': 2704,\n",
       " '政策': 5378,\n",
       " '扶持': 4942,\n",
       " '景气': 5726,\n",
       " '一个月': 249,\n",
       " '三次': 448,\n",
       " '加之': 2239,\n",
       " '下周': 520,\n",
       " '月末': 5804,\n",
       " '值得': 1588,\n",
       " '做好': 1603,\n",
       " '应对': 4339,\n",
       " '月初': 5801,\n",
       " '为首': 881,\n",
       " '模式': 6139,\n",
       " '保持': 1527,\n",
       " '随着': 9606,\n",
       " '带来': 4218,\n",
       " '刷新': 2177,\n",
       " '高点': 9942,\n",
       " '降温': 9568,\n",
       " '加剧': 2245,\n",
       " '现象': 6936,\n",
       " '必须': 4607,\n",
       " '重视': 9381,\n",
       " '红利': 7702,\n",
       " '军工': 1896,\n",
       " '上周': 468,\n",
       " '王者': 6898,\n",
       " '荣耀': 8263,\n",
       " '类似': 7655,\n",
       " '来自': 5992,\n",
       " '比较': 6259,\n",
       " '敏感': 5395,\n",
       " '半年': 2414,\n",
       " '容易': 3894,\n",
       " '实际上': 3835,\n",
       " '美联储': 7944,\n",
       " '加息': 2253,\n",
       " '缩表': 7875,\n",
       " '行为': 8377,\n",
       " '货币政策': 8751,\n",
       " '开启': 4409,\n",
       " '流行': 6482,\n",
       " '很难': 4553,\n",
       " '中性': 821,\n",
       " '偏紧': 1600,\n",
       " '常态': 4237,\n",
       " '基本面': 3257,\n",
       " '阶段': 9522,\n",
       " '一段': 334,\n",
       " '高速': 9956,\n",
       " '增速': 3307,\n",
       " '下滑': 530,\n",
       " '而是': 7987,\n",
       " '周期': 2910,\n",
       " '适度': 9196,\n",
       " '供给': 1475,\n",
       " '结构性': 7809,\n",
       " '改革': 5342,\n",
       " '决定': 1946,\n",
       " '运行': 9062,\n",
       " '之下': 932,\n",
       " '前期': 2194,\n",
       " '单纯': 2448,\n",
       " '依托': 1477,\n",
       " '能够': 8072,\n",
       " '担忧': 5043,\n",
       " '尤其': 3998,\n",
       " '越来越': 8876,\n",
       " '甚至': 6986,\n",
       " '排除': 5168,\n",
       " '选择': 9210,\n",
       " '伴随': 1377,\n",
       " '谨慎': 8709,\n",
       " '气氛': 6296,\n",
       " '对于': 3910,\n",
       " '梳理': 6104,\n",
       " '警惕': 8536,\n",
       " '兑现': 1681,\n",
       " '利润': 2140,\n",
       " '重新': 9372,\n",
       " '机会': 5924,\n",
       " '阻力': 9524,\n",
       " '密集': 3905,\n",
       " '及时': 2587,\n",
       " '减仓': 1964,\n",
       " '毕竟': 6265,\n",
       " '通道': 9250,\n",
       " '扭转': 4938,\n",
       " '暂时': 5740,\n",
       " '持有': 5095,\n",
       " '主板': 903,\n",
       " '终于': 7769,\n",
       " '遗憾': 9283,\n",
       " '之际': 956,\n",
       " '周五': 2903,\n",
       " '怎样': 4634,\n",
       " '登记': 7131,\n",
       " '托管': 4914,\n",
       " '实施细则': 3825,\n",
       " '实施': 3823,\n",
       " '发改委': 2642,\n",
       " '抓紧': 4976,\n",
       " '制定': 2162,\n",
       " '出台': 1999,\n",
       " '价格': 1279,\n",
       " '监管': 7171,\n",
       " '规则': 8492,\n",
       " '社部': 7369,\n",
       " '月底': 5802,\n",
       " '基本': 3254,\n",
       " '实现': 3828,\n",
       " '跨省': 8909,\n",
       " '异地': 4440,\n",
       " '就医': 4004,\n",
       " '直接': 7200,\n",
       " '成品油': 4788,\n",
       " '年内': 4277,\n",
       " '下调': 536,\n",
       " '降幅': 9566,\n",
       " '国防': 3114,\n",
       " '科工': 7421,\n",
       " '混改': 6594,\n",
       " '资产': 8789,\n",
       " '证券化': 8599,\n",
       " '进程': 9139,\n",
       " '广电总局': 4327,\n",
       " '新浪': 5512,\n",
       " '微博': 4576,\n",
       " '网站': 7894,\n",
       " '关停': 1820,\n",
       " '视听': 8503,\n",
       " '节目': 8200,\n",
       " '欧美': 6172,\n",
       " '稳健': 7478,\n",
       " '国内': 3075,\n",
       " '形式': 4512,\n",
       " '整理': 5437,\n",
       " '1800': 55,\n",
       " '相比': 7222,\n",
       " '显得': 5699,\n",
       " '弱势': 4465,\n",
       " '转换': 8971,\n",
       " '随时': 9604,\n",
       " '第一': 7548,\n",
       " '第二': 7576,\n",
       " '实质性': 3832,\n",
       " '低开': 1387,\n",
       " '可能性': 2742,\n",
       " '防止': 9511,\n",
       " '极为': 6002,\n",
       " ...}"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vectorized.vocabulary_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64),\n",
       " array([  35,   46,  302,  912,  933, 1546, 1743, 1819, 1844, 2558, 2635,\n",
       "        2734, 3974, 4113, 4132, 4405, 4505, 4525, 4802, 4878, 5628, 5738,\n",
       "        5760, 5808, 5892, 6195, 6880, 7319, 7338, 7607, 7662, 9082, 9141,\n",
       "        9631], dtype=int64))"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.where(X[0].toarray()) # get the positions which values are not zero"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "document_id_1, document_id_2 = random.randint(0, 1000), random.randint(0, 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "249"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "document_id_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "629"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "document_id_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'卖家 表示   这是 全网 唯一 一台 小米 6 亮银 探索 版   来源 是   媒体 评测 机   拍卖 将 于 今天下午 19 点 结束   到 时 拍卖 价格 会 是 多少 呢   能 真正 的 交易 吗'"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "news_content[document_id_1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'中新网 北京 6 月 20 日电   记者   张尼   20 日   最高人民法院 首次 发布 禁毒 工作 白皮书   白皮书   显示   广东   湖南   浙江   四川   贵州   云南   广西   重庆   江苏   湖北 为 排名 前十 的 毒品 犯罪 高发 省份   其中 广东 的 毒品 犯罪案件 数量 近年来 一直 居 全国 首位   20 日   最高人民法院 召开 新闻 发布会   介绍 人民法院 依法惩治 毒品 犯罪 有关 情况 及   人民法院 禁毒 工作 白皮书   2012   2017   有关 情况   发布 10 起 人民法院 惩治 毒品 犯罪 典型 案例 并 回答 记者 提问   白皮书   显示   2012 年 至 2016 年   全国 法院 一审 新收 毒品 犯罪案件 共计 54   1 万件   审结 53   5 万件   判决 生效 犯罪分子 54   3 万人   一审 结案 数从 2012 年 的 7   6 万件 增至 2016 年 的 11   8 万件   增幅 为 54   12   生效 判决 人数 从 8   1 万人 增至 11   6 万人   增幅 为 43   09   毒品 犯罪案件 在 全部 刑事案件 中 的 比例   从 7   73   增至 10   54   毒品 犯罪案件 是 增长 最快 的 案件 类型 之一   其 增幅 是 全部 刑事案件 总体 增幅 的 4   12 倍   另外   中国 毒品 犯罪 已 突破 以往 主要 分布 于 边境   沿海地区 的 地域性 特征   遍及 全国 所有 省份   但 案件 数量 排名 全国 前 十位 的 省份 主要 集中 在 华南   西南   华东 和 华中地区   2012 年 至 2016 年   一审 审结 毒品 犯罪案件 数 排名 前十 的 省份 为   广东 94853 件   湖南 33068 件   浙江 31240 件   四川 29747 件   贵州 29570 件   云南 29307 件   广西 28349 件   重庆 27725 件   江苏 26054 件   湖北 20955 件   其中   广东 的 毒品 犯罪案件 数量 近年来 一直 居 全国 首位   五年 来 的 结案 量 占 全国 总量 的 17   73   为 排名 第二 的 湖南 的 2   87 倍   据介绍   云南 是 缅北 毒品 向 中国 渗透 的 主要 通道   近年来 案件 数量 增速 减缓   但 大宗 毒品 犯罪案件 多发   海洛因 和 甲基苯丙胺 片剂 的 缴获 量 居 全国 首位   广西 中 越 边境地区 已 成为   金三角   毒品走私 入境 的 第二 大通道   江苏   浙江   湖南   湖北 等 地受 其他 省份 毒品 渗透 影响 和 本地 毒品 消费 刺激   毒品 犯罪 数量 居高不下   此外   辽宁   山东   海南   甘肃 等 省份 的 毒品 犯罪 也 呈 多发 态势   犯罪 形式 较为 严峻   完   责任编辑   张迪'"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "news_content[document_id_2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [],
   "source": [
    "vector_of_d_1 = X[document_id_1].toarray()[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "vector_of_d_2 = X[document_id_2].toarray()[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "random_choose = random.randint(0, 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "random_choose"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "news_content[random_choose]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.spatial.distance import cosine"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def distance(v1, v2): return cosine(v1, v2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "distance([1, 1], [2, 2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "distance(X[random_choose].toarray()[0], X[document_id_1].toarray()[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "distance(X[random_choose].toarray()[0], X[document_id_2].toarray()[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "news_content[320]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "news_content[72]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "news_content[85]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "news_content[8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sorted(list(range(10000)), key=lambda i: distance(X[random_choose].toarray()[0], \n",
    "                                      X[i].toarray()[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "2**64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bin(19)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bin(49)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bin(38)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bin(49 & 38)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build Search Engine "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```\n",
    "Input: Words\n",
    "Output: Documents\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [],
   "source": [
    "def naive_search(keywords):\n",
    "    news_ids = [i for i, n in enumerate(news_content) if all(w in n for w in keywords)]\n",
    "    # O(D * w) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "106 ms ± 3.06 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit\n",
    "naive_search('美军 司令 航母'.split())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Input word -> the documents which contain this word"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "transposed_x = X.transpose().toarray()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "word_2_id = vectorized.vocabulary_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "word_2_id['今天']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "id_2_word = {d: w for w, d in word_2_id.items()}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "id_2_word[6195]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "set(np.where(transposed_x[6195])[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "'美军'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "word_2_id['美军']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "word_2_id['司令']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "usa_force = set(np.where(transposed_x[7922])[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "commander = set(np.where(transposed_x[2769])[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "usa_force & commander"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from functools import reduce"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "d1, d2, d3 = {1, 2, 3}, {4, 5, 6, 3, 2}, {1, 3, 4}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from operator import and_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "reduce(and_, [d1, d2, d3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def search_engine(query):\n",
    "    \"\"\"\n",
    "    @query is the searched words, splited by space\n",
    "    @return is the related documents which ranked by tfidf similarity\n",
    "    \"\"\"\n",
    "    words = query.split()\n",
    "    \n",
    "    query_vec = vectorized.transform([' '.join(words)]).toarray()[0]\n",
    "\n",
    "    candidates_ids = [word_2_id[w] for w in words]\n",
    "    \n",
    "    documents_ids = [\n",
    "         set(np.where(transposed_x[_id])[0]) for _id in candidates_ids\n",
    "    ]\n",
    "    \n",
    "    merged_documents = reduce(and_, documents_ids)\n",
    "    # we could know the documents which contain these words\n",
    "    sorted_docuemtns_id = sorted(merged_documents, key=lambda i: distance(query_vec, X[i].toarray()))\n",
    "\n",
    "    return sorted_docuemtns_id"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.where(vectorized.transform(['美联储 加息 次数']).toarray()[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "text = \"\"\"新华社洛杉矶４月８日电（记者黄恒）美国第三舰队８日发布声明说，该舰队下属的“卡尔·文森”航母战斗群当天离开新加坡，改变原定驶往澳大利亚的任务计划，转而北上，前往西太平洋朝鲜半岛附近水域展开行动。\\n　　该舰队网站主页发布的消息说，美军太平洋司令部司令哈里·哈里斯指示“卡尔·文森”航母战斗群向北航行。这一战斗群包括“卡尔·文森”号航空母舰、海军第二航空队、两艘“阿利·伯克”级导弹驱逐舰和一艘“泰孔德罗加”级导弹巡洋舰。\\n　　“卡尔·文森”号航母的母港位于美国加利福尼亚州的圣迭戈，今年１月初前往西太平洋地区执行任务，并参与了日本及韩国的军事演习。\\n　　美国有线电视新闻网援引美国军方官员的话说，“‘卡尔·文森’号此次行动是为了对近期朝鲜的挑衅行为作出回应”。（完）\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "text = \"\"\"美国有线电视新闻网援引美国军方官员的话说\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pat = r'(新闻|官员)'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "re.compile(pat).sub(repl=\"**\\g<1>**\", string=text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_query_pat(query):\n",
    "    return re.compile('({})'.format('|'.join(query.split())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "get_query_pat('美军 司令 航母')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def highlight_keywords(pat, document):\n",
    "    return pat.sub(repl=\"**\\g<1>**\", string=document) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "highlight_keywords(get_query_pat('美军 司令 航母'), content['content'][22987])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.display import display, Markdown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def search_engine_with_pretty_print(query):\n",
    "    candidates_ids = search_engine(query)\n",
    "    for i, _id in enumerate(candidates_ids):\n",
    "        title = '## Search Result {}'.format(i)\n",
    "        c = content['content'][_id]\n",
    "        c = highlight_keywords(get_query_pat(query), c)    \n",
    "        \n",
    "        display(Markdown(title + '\\n' + c))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "search_engine_with_pretty_print('春节 假期')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "search_engine()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#%%timeit\n",
    "search_engine('美联储 加息 次数')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "content['content'][2189]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Why ?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```\n",
    "preprocessing\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PageRank"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from string import ascii_uppercase"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ascii_uppercase"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def genearte_random_website():\n",
    "    return ''.join([random.choice(ascii_uppercase) for _ in range(random.randint(3, 5))]) + '.'  + random.choice(['com', 'cn', 'net'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "genearte_random_website()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "websites = [genearte_random_website() for _ in range(25)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "websites"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "random.sample(websites, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "website_connection = {\n",
    "    websites[0]: random.sample(websites, 10),\n",
    "    websites[1]: random.sample(websites, 5),\n",
    "    websites[3]: random.sample(websites, 7),\n",
    "    websites[4]: random.sample(websites, 2),\n",
    "    websites[5]: random.sample(websites, 1),\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "website_network = nx.graph.Graph(website_connection)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.figure(3,figsize=(12,12))\n",
    "nx.draw_networkx(website_network, font_size=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sorted(nx.pagerank(website_network).items(),key=lambda x: x[1], reverse=True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
